Как проверить пустую строку с помощью сканера Java?

Я ожидаю ввода со сканером, пока не будет ничего (т.е. Когда пользователь вводит пустую строку). Как мне это достичь?

Я пытался:

while (scanner.hasNext()) {
    // process input
}

Но это заставит меня застрять в цикле

Ответ 1

Вот путь:

Scanner keyboard = new Scanner(System.in);
String line = null;
while(!(line = keyboard.nextLine()).isEmpty()) {
  String[] values = line.split("\\s+");
  System.out.print("entered: " + Arrays.toString(values) + "\n");
}
System.out.print("Bye!");

Ответ 2

С http://www.java-made-easy.com/java-scanner-help.html:

В: Что произойдет, если я сканю пустую строку с помощью Java Scanner?

A: Это зависит. Если вы используете nextLine(), пустая строка будет считана пустой String. Это означает, что если вы хотите сохранить пустую строку в переменной String, переменная будет содержать "". Он НЕ будет хранить "" или сколько бы места не было помещено. Если вы используете next(), то он не будет читать пустые строки вообще. Они полностью пропущены.

Я предполагаю, что nextLine() прежнему будет запускаться на пустой строке, так как технически сканер будет иметь пустую строку "". Итак, вы можете проверить, является if s.nextLine().equals("")

Ответ 3

Проблема с предложениями по использованию scanner.nextLine() заключается в том, что она фактически возвращает следующую строку как String. Это означает, что любой текст, который там есть, потребляется. Если вы заинтересованы в сканировании содержимого этой строки... ну, слишком плохо! Вам нужно будет самостоятельно проанализировать содержимое возвращенной String.

Лучшим способом было бы использовать

while (scanner.findInLine("(?=\\S)") != null) {
    // Process the line here…
    …

    // After processing this line, advance to the next line (unless at EOF)
    if (scanner.hasNextLine()) {
        scanner.nextLine();
    } else {
        break;
    }
}

Так как (?=\S) - это утверждение с нулевой шириной, оно никогда не будет потреблять никакого ввода. Если он найдет текст без пробелов в текущей строке, он выполнит тело цикла.

Вы можете опустить else break; если вы уверены, что тело цикла будет потреблять весь текст без пробелов в этой строке.

Ответ 4

AlexFZ прав, scanner.hasNext() всегда будет истинным, а цикл не заканчивается, потому что всегда есть строковый ввод, хотя он пуст ".

У меня была такая же проблема, и я решил ее следующим образом:

do{
    // process input
}while(line.length()!=0);
Я думаю, что do-while будет соответствовать здесь лучше, потому что вам нужно оценить ввод после того, как пользователь ввел его.

Ответ 5

Scanner key = new Scanner(new File("data.txt"));
String data = "";

while(key.hasNextLine()){
    String nextLine = key.nextLine();

    data += nextLine.equals("") ? "\n" :nextLine;

}
System.out.println(data);