Scanner的hasNext()在while中死循环的原因?

//问题描述
Scanner sc = new Scanner(System.in); while(sc.hasNext()){ System.out.println(sc.next()); }

命令行运行不会停止,你可以一直输入数据,不会自动结束,意思就是跳不出这个循环了,原因?

解答:

hasNext()这个方法是如果此扫描器的输入中有另一个标记,则返回 true。在等待要扫描的输入时(因为标准输入流一直没有关闭,所以hasNext()方法一直等待流的下一个数据),此方法可能阻塞。扫描器将不执行任何输入。所以循环会一直下去(本质上是io流阻塞了)。
你可以设置一个终止符,调用hasNext()的重载方法hasNext(String patten):如果下一个标记与从指定字符串构造的模式匹配,则返回 true。扫描器不执行任何输入。
例:以输入"0",结束输出
Scanner sc = new Scanner(System.in);
while (!sc.hasNext("0")) {
System.out.println(sc.next());
}
仅做参考!

posted @ 2017-09-11 22:22  Allen101  阅读(1013)  评论(0)    收藏  举报