我必須失去了一些東西明顯有關各種掃描方法的工作原理,但這真的沒有任何意義:刪除包含next()的println會導致無限循環?
此代碼會導致一個無限循環:
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 ://做cs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#next%28%29)
這很有道理,但我只是不明白爲什麼沒有明確提到方法的細節?也許這只是我,但當我閱讀「查找並返回來自此掃描器的下一個完整標記」時,它聽起來像一個類似存取器的方法,而不是進行任何更新。 – user1086516 2012-04-08 20:22:03
@ user1086516:好的。 'hasNext' /'next'是迭代器的標準Java成語。 – 2012-04-08 20:26:27