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

我正在尝试将文件中的所有整数读取到 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();

    }            

 }

}


噜噜哒
浏览 195回答 2
2回答

慕容森

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

忽然笑

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

相关分类

Java