從一行讀取多個整數
一、簡介
在本文中,我們將探討如何從檔案中寫入的一行讀取多個整數。我們將探索標準 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
用來解析輸入流的分隔符號模式定義。預設情況下, 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
類別提供了讀取基本類型的特定方法。
與往常一樣,本文中的所有程式碼範例都可以在 GitHub 上找到。