Есть ли способ выйти из цикла while, читая пустую строку с помощью nextLine ()? (Джава) - PullRequest
0 голосов
/ 15 сентября 2018

Для назначения мне нужно использовать сканер для считывания неопределенного количества входных данных и иметь соответствующий выходной сигнал в качестве ответа. Чтобы продолжать принимать входные данные, я использовал цикл while:

while (!(readLine = scanner.nextLine()).equals(""))

Окончательная запись заканчивается "следующей строкой", поэтому сканер не должен ничего читать, но цикл не заканчивается, пока я не нажму клавишу ввода вручную. Любое понимание причины?

Примечание. Пример входных данных выглядит следующим образом

name specific_string1 specific_string2
command1 name specific_string2
command2 name
command3 name

Я вынимаю первое слово из строки, чтобы использовать команду в операторе switch, содержащемся в цикле, в то время как name и specific_strings хранятся в переменных. NextLine () читает эти строки построчно, но не завершается самостоятельно.

1 Ответ

0 голосов
/ 15 сентября 2018

Окончательная запись заканчивается «следующей строкой», поэтому сканер не должен ничего читать, но цикл не заканчивается, пока я не нажму клавишу ввода вручную.

Это ожидаемое поведение. Способ, которым операционная система (и Java) знает, что вы закончили ввод символов в строке, - это когда вы нажимаете ENTER. Если / до тех пор, пока вы не введете ENTER, вы можете вводить другие символы .... делая строку непустой. Клавиша ENTER говорит: «Я, пользователь, закончил эту строку».


Для записи, scanner.nextLine() может вернуть null, поэтому

    (readLine = scanner.nextLine()).equals("")

может бросить NPE. Когда nextLine() возвращает null? Когда Scanner достигает конца потока. Как вы сигнализируете о завершении потока с консоли? Набрав ^ D (в Linux / MacOS) или ^ Z (в Windows).

Может быть ответ на вашу загадку выше ...

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