2009-11-10 3 views
0

Я читаю несколько строк из консоли в Java-программе, используя команду readLine из класса BufferedReader. Однако программа останавливается в конце последней строки и не работает до тех пор, пока я не вернусь. Как устранить эту паузу?Удаление паузы после чтения с использованием readLine в java

+3

И когда именно компьютер определяет, когда пользователь ввел строку? Я имею в виду, если вы устраните возврат, что заставляет компьютер двигаться дальше после того, как был написан 1 символ? – Bobby

ответ

3

Что именно вы делаете и чего вы ожидаете? У меня есть две догадки:

  1. У вас есть лишний readLine() в конце программы. Удалите его или измените условия цикла, чтобы решить эту проблему.
  2. Вы ожидаете, что программа начнет работу над строкой, которая вводится (без удара Return в конце). Вот где ваши ожидания ошибочны. readLine() возвращает полную строку и блокирует во время ее ввода. Таким образом, вызов просто ждет, пока вы не нажмете Return, а затем вернете только что введенную строку. Для ввода ввода во время ввода пользователем ни BufferedReader, ни readLine() очень подходят.
+0

только что проверил условия цикла, ни лишнего ReadLine() ... – Pranav

+0

Это отлично работает, хотя - общественный класс Кнопки { государственной статической силы основных (String [] арг) броски java.lang.Exception { java.io. BufferedReader r = новый java.io.BufferedReader (новый java.io.InputStreamReader (System.in)); String s; while (! (S = r.readLine()). StartsWith ("42")) System.out.println (s); } } – Pranav

+0

Не могли бы вы поместить код, который у вас есть, в свой вопрос при правильном форматировании? Было бы гораздо легче читать. – Joey

1

Это уловка-22; вы не можете знаете Это последняя строка, пока она не была полностью введена (включая возврат каретки в конце), и вы можете ее проанализировать. Значит, вы только знаете, что вы могли пропустить ожидание, как только вы уже пропустили свой шанс.

Это предполагает, что вы обнаруживаете последнюю строку на основе ее содержимого (например, пустую строку, конкретную строку «42» и т. Д.). Если у вас есть другие способы определения последней строки, вы можете использовать это как условие цикла while, поэтому вам не нужно ждать, чтобы прочитать строку «дозорный», которая просто говорит вам о выходе.

Но в приведенном вами примере кода вы можете получить доступ к строке «42» после того, как она была полностью введена, включая некоторые терминаторы линий (возврат каретки, EOF и т. Д.). Таким образом, пока вы не нажмете return, эта строка не существует с точки зрения читателя.

1

A строка - это последовательность символов, обозначающая CR или CRLF. И readline() просто делает то, что говорит это имя: он читает строку .

Если у вас есть какая-либо другая подсказка для определения «конца ввода», вы можете прочитать входной символ символом, пока условие «конец ввода» не будет истинным. Это может быть другой символ или специальная последовательность символов, таких как закрывающий тег, если вы посмотрите на вход xml.

Смежные вопросы