为了账号安全,请及时绑定邮箱和手机立即绑定

Java - 将文件中的所有整数添加到 ArrayList

Java - 将文件中的所有整数添加到 ArrayList

噜噜哒 2021-12-18 15:28:19
我正在尝试将文件中的所有整数读取到 java JUnit 测试的 @BeforeClass 中的 ArrayList 中。出于测试目的,我只是尝试将 arraylist 的所有值打印到屏幕上。然而,什么都没有输出。任何投入将不胜感激。public class CalcAverageTest{static List<Integer> intList = new ArrayList<Integer>();@BeforeClasspublic 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();    }             }}
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

促进对答案的评论

如果gradebook.txt是一个空文件,或者以不解析为 的内容开头int,例如文件顶部的文本或注释,scanner.hasNextInt()则将立即返回falseintList并将保持为空。然后for循环将在空列表上循环零次,并且不会生成任何输出,如所观察到的。

在整数之前,我有一些字符串要跳过。

scanner.readLine()可用于跳过数字前的注释行。如果不是一组需要跳过的行数,或者如果该行在数字之前有单词,我们需要查看输入样本以建议在输入文件中查找数字的最佳策略。


查看完整回答
反对 回复 2021-12-18
?
忽然笑

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。此方法可能会在等待输入时阻塞。扫描仪不会通过任何输入。


查看完整回答
反对 回复 2021-12-18
  • 2 回答
  • 0 关注
  • 194 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号