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)
使用建议的问题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;如果您确定循环体已经消耗了该行中的所有非空白文本,则可以省略。
来自http://www.java-made-easy.com/java-scanner-help.html:
问:如果我使用Java扫描仪扫描空行会怎样?
答:这取决于.如果您使用的是nextLine(),则会将空白行作为空字符串读入.这意味着如果要将空行存储在String变量中,则变量将保持为"".它不会存储""或者放置了许多空格.如果你正在使用next(),那么它根本不会读取空白行.它们完全被跳过了.
我的猜测nextLine()仍然会在一个空行上触发,因为从技术上讲,扫描仪将具有空字符串"".所以,你可以检查一下if s.nextLine().equals("")
| 归档时间: |
|
| 查看次数: |
78994 次 |
| 最近记录: |