вход буферизованного считывателя в массив символов - PullRequest
0 голосов
/ 13 мая 2018

Я хочу взять входные данные из txt-файла и поместить все символы в массив, чтобы я мог выполнять над ним некоторые функции регулярных выражений.Но когда я пытаюсь прочитать массив с помощью одного цикла, чтобы проверить его, ничего не появляется.Что здесь не так?

import java.io.BufferedReader;
import java.io.FileReader;

public class Main
{
    public static void main(String[] args)
    {
        try
        {
            Task2.doTask2();
        }catch(Exception e){};
    }
}

class Task2
{
    public static void doTask2() throws Exception
    {
        FileReader fr = new FileReader("F:\\Filip\\TextTask2.txt");
        BufferedReader br = new BufferedReader(fr);

        char[] sentence = null;
        int i;
        int j = 0;
        while((i = br.read()) != -1)
        {
            sentence[j] = (char)i;
            j++;
        }
        for(int g = 0; g < sentence.length; g++)
        {
            System.out.print(sentence[g]);
        }

        br.close();
        fr.close();
    }
}

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Вы используете неправильный индекс, используйте «g» вместо «i» здесь ::1001*

System.out.println(sentence[g]);

Кроме того, лучший и самый простой способ сделать это:

package io;
import java.nio.file.*;;
public class ReadTextAsString
{
  public static String readFileAsString(String fileName)throws Exception
  {
     return new String(Files.readAllBytes(Paths.get(fileName)));
  }

  public static void main(String[] args) throws Exception
  {
    String data = readFileAsString("F:\\Filip\\TextTask2.txt");
    System.out.println(data); //or iterate through data if you want to print each character.    
  }
}
0 голосов
/ 13 мая 2018

Вы можете прочитать файл просто используя File.readAllBytes.Тогда нет необходимости создавать отдельные программы чтения.

String text = new String(
    Files.readAllBytes(Paths.get("F:\\Filip\\TextTask2.txt"))
);

В исходном фрагменте функция чтения файла выдает NullPointerException, поскольку sentence был инициализирован как null изатем разыменовывается: sentence[j] = (char)i;

Исключение было поглощено вызывающей функцией и не распечатано, поэтому вы не видите его при запуске программы: }catch(Exception e){};

Вместопроглотив исключение, объявите вызывающую функцию как выбрасывающую соответствующее проверенное исключение.Таким образом, при запуске вы увидите трассировку стека: public static void main(String[] args) throws IOException {

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...