我一定错过了一些关于各种扫描仪方法如何工作的明显内容,但这真的没有任何意义:
此代码会导致无限循环:
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
的状态。
第二个示例中对valueScan.next()
的调用是使扫描仪向前发展的原因。 hasNext()
只检查扫描仪中是否有下一个项目,但不执行任何其他操作,因此如果至少有一个项目,则无限循环。
hasnext
只告诉你下一个元素是否存在,next
转到该元素。
所以在你的第一个循环中,它停留在第一个元素上,并不断告诉你第二个元素存在,不再做更多的事情。
如果没有next()
,Scanner
就不会迭代。