对于各种扫描仪方法的工作方式,我肯定会有所遗漏,但这确实没有任何意义:

此代码会导致无限循环:

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的状态。

09-12 23:22