• ,

Уровень 32. Вопросы.

Уровень 32
3 лекция: StringReader, StringWriter

Код в лекции для примера «Чтение из объекта reader и запись в объект writer»
Выдает ошибку:
Exception in thread "main" java.lang.NullPointerException
	at java.lang.StringBuilder.<init>(StringBuilder.java:112)


По всей видимости это происходит при 4-й итерации цикла, когда считывать из br собственно уже нечего и считывается null, который при попытке записи в StringBuilder и вызывает ошибку.

В чём тут дело, почему пример не работает как надо?

public static void main (String[] args) throws Exception
{
 //эту строку должен будет прочитать Reader
 String test = "Hi!\n My name is Richard\n I'm a photographer\n";
 //заворачиваем строку в StringReader
 StringReader reader = new StringReader(test);

 //Создаем объект StringWriter
 StringWriter writer = new StringWriter();

 //переписываем строки из Reader во Writer, предварительно развернув их
 executor(reader, writer);

 //получаем текст, который был записан во Writer
 String result = writer.toString();

 //выводем полученный из Writer’а текст на экран
 System.out.println("Результат: "+result);
}

public static void executor(Reader reader, Writer writer) throws Exception
{
 BufferedReader br = new BufferedReader(reader);
 while (br.ready())
 {
  //читаем строку из Reader’а
  String line = br.readLine();

  //разворачиваем строку задом наперед
  StringBuilder sb = new StringBuilder(line);
  String newLine = sb.reverse().toString();

  //пишем строку в Writer
  writer.write(newLine);
 }
}

4 комментария

lichMax
я отладка что говорит?
lichMax
Ладно, сам проверил. Да, когда в потоке заканчиваются строки, то кидается NPE. Хм. Выходом конечно является проверять в условии продолжения цикла, является ли нуллом очередная строка, полученная из потока. Но странно, что такие проблемы есть с ready(). Хотя что-то про это слышал. А что пишут в комментах к этому уроку?
Globus51
Только вот это в комментах:
br.ready() не видит берега в данном случае (Виндовз) и цикл получается бесконечный, печатая строки null )
Globus51
Так что там, код в лекции правильный или нет?
Почему никто не отвечает, обучение стоит…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.