对于一项作业,我需要使用扫描仪读取未指定数量的输入,并有相应的输出作为响应。为了继续接受输入,我使用了 while 循环:
while (!(readLine = scanner.nextLine()).equals(""))
最后的条目以“下一行”结束,因此扫描仪应该不会读取任何内容,但循环不会结束,直到我手动按下回车键。对原因有什么见解吗?
注意:输入的示例如下
name specific_string1 specific_string2
command1 name specific_string2
command2 name
command3 name
我从字符串中取出第一个单词,以便在循环内包含的 switch 语句中使用该命令,而名称和 Specific_strings 存储在变量中。 nextLine() 逐行读取这些内容,但不会自行退出。
最佳答案
The final entry ends with a "next line" so the scanner should be reading nothing, but the loop doesn't end until I press the enter key manually.
这是预期的行为。当您按下 ENTER 时,操作系统(和 Java)就知道您已经完成了一行中的字符输入。除非/直到您键入 ENTER,否则您可以键入其他字符......使该行非空。 ENTER 键表示“我,用户,已完成此行”。
<小时/>郑重声明,scanner.nextLine()
可以返回 null
,因此
(readLine = scanner.nextLine()).equals("")
可能会抛出 NPE。 nextLine()
何时返回 null
?当扫描仪
到达流末尾时。如何从控制台发出流结束信号?通过键入 ^D(在 Linux/MacOS 上)或 ^Z(在 Windows 上)。
上面可能有您的难题的答案......
关于java - 有没有办法通过使用 nextLine() 读取空行来退出 while 循环? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52341955/