1. 概述

本文将探讨如何从文件中的一行读取多个整数。我们将使用标准的 Java 包,特别是 BufferedReaderScanner 来实现所需功能。

2. 示例数据

对于所有示例,让我们定义示例数据和参数。首先,在资源文件夹中手动创建一个名为 intinputs.txt 的简单文件,作为我们的输入源:

1 2 3 4 5

此外,我们将使用以下示例值作为预期的整数数量和文件路径:

private static final String FILE_PATH = "src/test/resources/intinputs.txt"; 
private static final int EXPECTED_NO_OF_INTEGERS = 5 ;

3. 使用 BufferedReader

让我们探索 BufferedReader 类,它允许我们逐行读取输入。我们可以将整行读取为 String,然后根据分隔符分割输入,并将其解析为 Integer

@Test
public void givenFile_whenUsingBufferedReader_thenExtractedIntegersCorrect() throws IOException {
    try (BufferedReader br = Files.newBufferedReader(Paths.get(FILE_PATH))) {
        String inputs = br.readLine();
        int[] requiredInputs = Arrays.stream(inputs.split(" "))
          .mapToInt(Integer::parseInt).toArray();

        assertEquals(EXPECTED_NO_OF_INTEGERS, requiredInputs.length);
    }
}

我们使用 Arrays.stream() 在分割的输出上创建流,然后使用 parseInt() 方法将其映射为 Integer。这样,我们就从输入源中读取了多个 Integer 到数组中。

4. 使用 Scanner

使用 Scanner 类,我们可以用类似的方法实现相同的结果。Scanner 类提供了不同的方法从输入源读取数据。

Scanner 中的标记由用于解析输入流的分隔符模式定义。默认情况下,Scanner 的分隔符模式是任何空白字符(如空格、制表符或换行符)。

我们将详细探讨 nextInt()nextLine() 方法。

4.1. 使用 nextInt() 方法

Scanner 类提供了 nextInt() 方法来读取输入中的 Integer

让我们使用 nextInt() 方法:

@Test
public void givenFile_whenUsingScannerNextInt_thenExtractedIntegersCorrect() throws IOException {
    try (Scanner scanner = new Scanner(new File(FILE_PATH))) {
        List<Integer> inputs = new ArrayList<>();
        while (scanner.hasNext()){
            inputs.add(scanner.nextInt());
        }

        assertEquals(EXPECTED_NO_OF_INTEGERS,inputs.size());
    }
}

我们将 nextInt() 方法的输出添加到 Integer 列表中。这样,我们就从输入源中读取了多个 Integer。使用 nextInt() 时,我们需要确保只提供 Integer 输入,否则会抛出 InputMismatchException

4.2. 使用 nextLine() 方法

BufferedReader 类似,Scanner 也提供了读取整行的方法。nextLine() 方法读取整行,我们可以使用所需的分隔符进行分割:

@Test
public void givenFile_whenUsingScannerNextLine_thenExtractedIntegersCorrect() throws IOException {
    try (Scanner scanner = new Scanner(new File(FILE_PATH))) {
        String inputs = scanner.nextLine();
        int[] requiredInputs = Arrays.stream(inputs.split(" "))
          .mapToInt(Integer::parseInt).toArray();

        assertEquals(EXPECTED_NO_OF_INTEGERS,requiredInputs.length);
    }
}

BufferedReader 类似,我们使用 Arrays.stream() 在分割的输出上创建流,然后使用 parseInt() 方法将其映射为 Integer

5. 总结

在本教程中,我们探讨了使用 BufferedReaderScanner 方法从输入中读取整数的不同方式。虽然 BufferedReader 只有一种读取输入的方法,但 Scanner 类提供了读取基本类型的特定方法。


原始标题:Read Multiple Integers From One Line | Baeldung