Вопрос-ответ

How to terminate Scanner when input is complete?

Как завершить работу сканера по завершении ввода?
public static void main(String[] args) {

Scanner scan = new Scanner(System.in);
try {
while (scan.hasNextLine()){

String line = scan.nextLine().toLowerCase();
System.out.println(line);
}

} finally {
scan.close();
}
}

Просто интересно, как я могу завершить программу после завершения ввода входных данных?
Поскольку сканирование все равно продолжится после нескольких "Enter", предполагая, что я продолжу вводить входные данные...
Я попытался:

if (scan.nextLine() == null) System.exit(0);

и

if (scan.nextLine() == "") System.exit(0);  

Они не сработали.... Программа продолжает работу и нарушает первоначальное намерение,

Переведено автоматически
Ответ 1

Проблема в том, что программа (подобная вашей) не знает, что пользователь завершил ввод данных, если только пользователь ... каким-либо образом ... сообщает ей об этом.

Пользователь может сделать это двумя способами:


  • Введите маркер "конец файла". В UNIX и Mac OS это (обычно) CTRL+D, а в Windows CTRL+Z. Это приведет к hasNextLine() возврату false.



  • Введите какой-нибудь специальный ввод, который распознается программой как означающий "Я закончил". Например, это может быть пустая строка или какое-нибудь специальное значение, например "exit". Программе необходимо протестировать именно это.



(Вы также могли бы использовать таймер и предположить, что пользователь закончил, если он не вводит никаких данных в течение N секунд или N минут. Но это не самый удобный способ, и во многих случаях это было бы опасно.)


Причина сбоя вашей текущей версии заключается в том, что вы используете == для проверки наличия пустой строки. Вам следует использовать методы equals или isEmpty. (См. Как мне сравнивать строки в Java?)

Другие вещи, которые следует учитывать, - это чувствительность к регистру (например, "exit" против "Выхода") и влияние начальных или завершающих пробелов (например, "exit" против "выхода").

Ответ 2

Сравнение строк выполняется с помощью .equals(), а не ==.

Итак, попробуйте scan.nextLine().equals("").

Ответ 3

Вам придется искать конкретный шаблон, который указывает на конец вашего ввода, скажем, например, "# #"

// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
try {
while (scan.hasNextLine()){

String line = scan.nextLine().toLowerCase();
System.out.println(line);
if (line.equals("##")) {
System.exit(0);
scan.close();
}
}

} finally {
if (scan != null)
scan.close();
}
Ответ 4

В этом случае я рекомендую вам использовать цикл do, while вместо while .

    Scanner sc = new Scanner(System.in);
String input = "";
do{
input = sc.nextLine();
System.out.println(input);
} while(!input.equals("exit"));
sc.close();

Для выхода из программы вам просто нужно назначить заголовок строки, например exit . Если значение input равно exit, то программа завершится. Кроме того, пользователи могут нажать control + c для выхода из программы.

java