对于各种扫描仪方法的工作方式,我肯定会有所遗漏,但这确实没有任何意义:
此代码会导致无限循环:
Scanner valueScan = new Scanner(line);
valueScan.useDelimiter(",");
while(valueScan.hasNext())
{
count++;
}
此代码有效时:
Scanner valueScan = new Scanner(line);
valueScan.useDelimiter(",");
while(valueScan.hasNext())
{
System.out.println("value token: " + valueScan.next());
cellCount++;
}
这来自Oracle文档,我不确定它是否适用或其含义:“即使先前调用hasNext()返回true,此方法也可能在等待输入扫描时阻塞。”(http://docs.oracle .com / javase / 1.5.0 / docs / api / java / util / Scanner.html#next%28%29)
最佳答案
因为hasNext
不会从Scanner
中删除任何内容,所以在您的第一种情况下,您永远不会更改其状态,因此会发生无限循环。 next
提取输入,因此更改Scanner
的状态。