1. 概述
本文将探讨如何从文件中的一行读取多个整数。我们将使用标准的 Java 包,特别是 BufferedReader
和 Scanner
来实现所需功能。
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. 总结
在本教程中,我们探讨了使用 BufferedReader
和 Scanner
方法从输入中读取整数的不同方式。虽然 BufferedReader
只有一种读取输入的方法,但 Scanner
类提供了读取基本类型的特定方法。