Удаление паузы после чтения с использованием readLine в Java - PullRequest
0 голосов
/ 10 ноября 2009

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

Ответы [ 3 ]

3 голосов
/ 10 ноября 2009

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

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

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

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

1 голос
/ 10 ноября 2009

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

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

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

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