我正在尝试将文件中的所有整数读取到Java JUnit测试的@BeforeClass中的ArrayList中。为了进行测试,我只是尝试将arraylist的所有值打印到屏幕上。但是什么也没有输出。任何输入将不胜感激。
public class CalcAverageTest
{
static List<Integer> intList = new ArrayList<Integer>();
@BeforeClass
public static void testPrep() {
try {
Scanner scanner = new Scanner(new File("gradebook.txt"));
while (scanner.hasNextInt()) {
intList.add(scanner.nextInt());
}
for (int i=0;i<intList.size();i++) {
System.out.println(intList.get(i));
}
} catch (IOException e) {
e.printStackTrace();
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
}
答案 0 :(得分:1)
(对答案发表评论)
如果gradebook.txt
是一个空文件,或者以不解析为int
的内容开头,例如文件顶部的文本或注释,则scanner.hasNextInt()
将立即返回false
,而intList
将保持为空。然后,for
循环将在空列表上循环零次,并且不会产生任何输出,如观察到的那样。
我有一些字符串要跳过整数之前。
scanner.readLine()
可用于跳过数字前的注释行。如果不是需要跳过的固定行数,或者数字之前的行中有单词,我们将需要查看输入样本,以建议在输入文件中查找数字的最佳策略。 / p>
答案 1 :(得分:1)
您需要遍历文件直到最后一行,因此您需要在循环中更改条件并使用.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。 等待输入时,此方法可能会阻塞。扫描仪不 超越任何输入。