如何使用Java Scanner测试空白行?

Jie*_*eng 15 java java.util.scanner

我希望用扫描仪输入,直到没有任何东西(即当用户输入空行时).我该如何实现这一目标?

我试过了:

while (scanner.hasNext()) {
    // process input
}
Run Code Online (Sandbox Code Playgroud)

但那会让我陷入困境

Bar*_*ers 19

这是一种方式:

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!");
Run Code Online (Sandbox Code Playgroud)

  • 这具有获取行的副作用(例如,我需要按空格分割行,例如,如果我想解析由空格分隔的值).是否有一个`hasNextLine()`类型方法,其中"指针"没有转到下一行? (2认同)

200*_*ess 6

使用建议的问题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;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于(?=\S)是零宽度前瞻断言,因此它永远不会消耗任何输入。如果在当前行中找到任何非空白文本,它将执行循环体。

else break;如果您确定循环体已经消耗了该行中的所有非空白文本,则可以省略。


Ale*_*xFZ 5

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

问:如果我使用Java扫描仪扫描空行会怎样?

答:这取决于.如果您使用的是nextLine(),则会将空白行作为空字符串读入.这意味着如果要将空行存储在String变量中,则变量将保持为"".它不会存储""或者放置了许多空格.如果你正在使用next(),那么它根本不会读取空白行.它们完全被跳过了.

我的猜测nextLine()仍然会在一个空行上触发,因为从技术上讲,扫描仪将具有空字符串"".所以,你可以检查一下if s.nextLine().equals("")