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

时间:2018-10-30 00:04:26

标签: java junit java.util.scanner

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

2 个答案:

答案 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。   等待输入时,此方法可能会阻塞。扫描仪不   超越任何输入。