@Koshkin_I

Почему код работает по разному?

Суть в принципе в заголовке.

String filename;
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (!(filename= reader.readLine()).equals("exit")){
            list.add(filename);
                     System.out.println(Arrays.toString(filename.split(".part")));
        }
        System.out.println(list);

выдает такой массив:
[uyfd.aufv.part23, uyfd.aufv.part5, uyfd.aufv.part11]
а если закоментить строку System.out... в цикле while то будет так:
[uyfd.aufv.part23, , uyfd.aufv.part5, , uyfd.aufv.part11, ]
Я так понимаю 3 пустых элемента, но от куда берутся и почему не понимаю.
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Dementor
программист, архитектор, аналитик
Если "если закоментить строку System.out... в цикле while", то для в остальном идентичного кода и идентичных входных данных результат будет идентичным.

Следовательно или входящие данные различны, или код выполняется в различных условиях. Даже бегло взглянув на код видно, что данные добавляются в неизвестный список, о котором ничего не известно - кто и где его создал, была ли очистка перед чтением входящего потока?
Ответ написан
GavriKos
@GavriKos
Я вот нифига не знаю как там в джаве устроены потоки ввода-вывода, но ОЧЕНЬ ПОХОЖЕ, что в BufferedReader ваш попадает результат System.out.println.

Для очень быстрой проверки замените
System.out.println(Arrays.toString(filename.split(".part")));
на что то вроде
System.out.println("WTF");
и посмотрите что будет в массиве
Ответ написан
Комментировать
@Koshkin_I Автор вопроса
Решен. Может кому пригодится.

Dmitry Roo Dmitry Roo Куратор тега Java
Koshkin_I, похоже на какую-то путанницу с cr/lf (новая строка/возврат корретки).

Не знаю насколько это костыльно, но проблему решает проверка !isEmpty() перед добавлением в list в цикле.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы