如何解决Scanner.hasNextLine-始终为true
我需要从标准输入中读取数据。 我想将其打印到标准输出。 我为此使用Scanner:
import java.util.Scanner;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int countLines = 1;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
sb.append(countLines).append(" ").append(line);
}
System.out.println("finish");
System.out.println(sb.toString());
scanner.close();
}
我输入了此数据:
Hello world
I am a file
Read me until end-of-file.
但是hasNextLine())
始终为 true 。结果是永远不要打印“ 完成”
解决方法
您的代码似乎可以正常工作。您确定正确输出EOF吗?请尝试按Ctrl + D(在Mac上为Cmd + D)或在Windows上按Ctrl + Z,如此处所述:How to send EOF via Windows terminal
,在任何情况下,循环都不为假,它将永远读取行。考虑添加诸如“停止”之类的停止关键字
while(scanner.hasNextLine())
{
String line = scanner.nextLine();
if(line.equalsIgnoreCase("stop"))
{
break;
}
//whatever else you have in the loop
}
除非您停止它,否则它永远都是真实的。正如@Aaron指出的那样
Scanner.hasNextLine()阻止等待新的一行,只有关闭流(使用Ctrl-Z或Liel在其答案中提到的D),它才会返回false。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。