2 回答

TA贡献1853条经验 获得超18个赞
(促进对答案的评论)
如果gradebook.txt
是一个空文件,或者以不解析为 的内容开头int
,例如文件顶部的文本或注释,scanner.hasNextInt()
则将立即返回false
,intList
并将保持为空。然后for
循环将在空列表上循环零次,并且不会生成任何输出,如所观察到的。
在整数之前,我有一些字符串要跳过。
scanner.readLine()
可用于跳过数字前的注释行。如果不是一组需要跳过的行数,或者如果该行在数字之前有单词,我们需要查看输入样本以建议在输入文件中查找数字的最佳策略。

TA贡献1806条经验 获得超5个赞
您需要遍历文件直到最后一行,因此您需要更改循环中的条件并使用.hasNextLine()而不是.nextInt()
while (scanner.hasNextLine()) {
String currLine = scanner.nextLine();
if (currLine != null && currLine.trim().length() > 0 && currLine.matches("^[0-9]*$"))
intList.add(Integer.parseInt(currLine));
}
}
在这里,我们读取每一行并将其存储在currLine. 现在只有当它包含一个数值时,它才会被添加到intList它被跳过的其他。^[0-9] $* 是用于仅匹配数值的正则表达式。
从文档中, hasNextLine()
如果此扫描仪的输入中有另一行,则返回 true。此方法可能会在等待输入时阻塞。扫描仪不会通过任何输入。
添加回答
举报