Непредсказуемый BufferedReader

Суть программы проста:

  • считать с консоли строки
  • остановиться когда вводят пустую строку,
  • все считанные строки сконкатенировать,
  • вывести полученный результат на экран.

Но проблема в том, что BufferedReader почему- то ведет себя непредсказуемо, и более того, неверно. в онлайн компиляторе код ведет себя более корректно в чем может быть проблема?? в пример привожу 4 разных цикла, которые должны работать одинаково (по моему скромному мнению, конечно), но ведут себя совсем не так (поведение описано в комментариях над ними)

Буду благодарен)

    public static void main(String[] args) throws IOException {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s = "";     /// чтобы в консольне не видить null лучше инициализировать как пустую строчку
        String app;
//======================================================================================================
//        //заполняет массив ридера нулями и цикл никогда не завершается
//        while ((app = reader.readLine()) != null) {
//            s += app;
//        }
//======================================================================================================
//        //удается ввести только 2 строки, после чего цикл прерывается. в строку s заносится только первая введенная строка
//        while (!(app = reader.readLine()).equals("")) {
//            s += app;
//        }
//======================================================================================================
//        //если вывод закомментирован - ведет себя как предыдущий, если нет - все работает правильно и в строку s вносятся все введенные в консоль строки
//        while (true) {
//            app = reader.readLine();
//            //System.out.println("line empty boolean " + app.isEmpty());
//            if(app.isEmpty()) break;
//            s += app;
//        }
//======================================================================================================
//        //тело цикла не выполняется никогда
//        while (reader.ready()) {
//            s+= reader.readLine();
//        }
//======================================================================================================        
        System.out.println("Мы считали с клавиатуры эту строку:");
        System.out.println(s);// я перенес сюда
    }

Ответы (0 шт):