在 Java 中逐字符讀取輸入
一、簡介
在許多 Java 應用程式中,我們需要逐字讀取輸入數據,因為這是一項常見任務,尤其是在處理來自流源的大量數據時。
在本教程中,我們將了解在 Java 中一次讀取一個字元的各種方法。
2.使用BufferedReader
進行控制台輸入
我們可以利用BufferedReader
從控制台逐字符讀取。請注意,如果我們尋求互動式讀取字符,此方法很有幫助。
讓我們舉個例子:
@Test
public void givenInputFromConsole_whenUsingBufferedStream_thenReadCharByChar() throws IOException {
ByteArrayInputStream inputStream = new ByteArrayInputStream("TestInput".getBytes());
System.setIn(inputStream);
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in))) {
char[] result = new char[9];
int index = 0;
int c;
while ((c = buffer.read()) != -1) {
result[index++] = (char) c;
}
assertArrayEquals("TestInput".toCharArray(), result);
}
}
在這裡,我們透過使用「TestInput」內容實例化ByteArrayInputStream
來簡單地模擬控制台輸入。然後,我們使用BufferedReader
從System.in
讀取字元。然後,我們使用read()
方法將一個字元讀取為整數程式碼並將其轉換為char
。最後,我們使用assertArrayEquals()
方法來驗證讀取的字元是否與預期的輸入相符。
3.使用FileReader
讀取文件
處理文件時, FileReader
是逐個字元讀取的合適選擇:
@Test
public void givenInputFromFile_whenUsingFileReader_thenReadCharByChar() throws IOException {
File tempFile = File.createTempFile("tempTestFile", ".txt");
FileWriter fileWriter = new FileWriter(tempFile);
fileWriter.write("TestFileContent");
fileWriter.close();
try (FileReader fileReader = new FileReader(tempFile.getAbsolutePath())) {
char[] result = new char[15];
int index = 0;
int charCode;
while ((charCode = fileReader.read()) != -1) {
result[index++] = (char) charCode;
}
assertArrayEquals("TestFileContent".toCharArray(), result);
}
}
在上面的程式碼中,我們建立一個臨時測試文件,其內容為“tempTestFile”用於模擬。然後,我們使用FileReader
透過tempFile.getAbsolutePath()
方法建立到由其路徑指定的檔案的連接。在try-with-resources
區塊中,我們逐字元讀取檔案。
4. 使用Scanner
進行標記化輸入
對於允許標記化輸入的更動態的方法,我們可以使用Scanner
:
@Test
public void givenInputFromConsole_whenUsingScanner_thenReadCharByChar() {
ByteArrayInputStream inputStream = new ByteArrayInputStream("TestInput".getBytes());
System.setIn(inputStream);
try (Scanner scanner = new Scanner(System.in)) {
char[] result = scanner.next().toCharArray();
assertArrayEquals("TestInput".toCharArray(), result);
}
}
我們透過使用「TestInput」內容實例化一個ByteArrayInputStream
來模擬上述測試方法中的控制台輸入。然後,我們利用hasNext()
方法來驗證是否存在另一個令牌。然後,我們利用next()
方法以String
形式取得目前的值。
5. 結論
總而言之,我們探索了 Java 中讀取字元的多種方法,包括使用BufferedReader
的互動式控制台輸入、使用FileReader
的基於文件的字元讀取以及透過Scanner,
為開發人員提供了在各種場景下高效處理字元資料的多種方法。
與往常一樣,本文的完整程式碼範例可以在 GitHub 上找到。