0

我一定遗漏了一些关于各种 Scanner 方法如何工作的明显信息,但这真的没有任何意义:

此代码导致无限循环:

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)

4

4 回答 4

4

因为hasNext不会从 中删除任何内容Scanner,所以在第一种情况下,您永远不会更改其状态,因此是无限循环。 next提取输入,从而改变Scanner.

于 2012-04-08T19:59:45.073 回答
0

第二个示例中的调用valueScan.next()是使扫描仪向前移动的原因。hasNext()仅检查扫描仪中是否有下一个项目,但不执行任何其他操作,因此如果至少有一个项目,则为无限循环。

于 2012-04-08T20:00:01.553 回答
0

没有next()Scanner不会迭代。

于 2012-04-08T20:00:06.117 回答
0

hasnext仅告诉您是否存在下一个元素并next转到该元素。

所以在你的第一个循环中,它停留在第一个元素并不断告诉你第二个元素存在并且什么都不做。

于 2012-04-08T20:01:35.997 回答