BufferedReaderでコンソールから文字入力方法を調べていたらScannerでの入力方法も気になってきたので2つの違いがわかればと比較してみたいと思います。
参考サイト:Difference between Scanner and BufferReader Class in Java
BufferedReaderでコンソールから文字入力
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
class BufferedReaderTest { | |
public static void main(String args[]) | |
throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
System.out.println("数値を入力してください"); | |
int a = Integer.parseInt(br.readLine()); | |
System.out.println("文字を入力してください"); | |
String b = br.readLine(); | |
System.out.printf("あなたが入力したのは: " + a + " と " + b); | |
br.close(); | |
} | |
} |
※ eclipseでは文字入力は英語で入力するか日本語の場合はきちんと改行された位置から文字を入力しないと文字が繰り返されておかしなことになります。Macだからかも?Scannerも同様です。
Scannerでコンソールから文字入力
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Scanner; | |
class Scan { | |
public static void main(String args[]) { | |
Scanner scn = new Scanner(System.in); | |
System.out.println("数値を入力してください"); | |
int a = Integer.parseInt(scn.nextLine()); | |
System.out.print("文字を入力してください"); | |
String b = scn.nextLine(); | |
System.out.printf("あなたが入力したのは : " + a + " と " + b); | |
scn.close(); | |
} | |
} |
Scannerのほうが比較的読みやすいコードですね。
さほど違いを感じませんでした。
ScannerとBufferedReaderの違い
コードの違いはScannerのほうが簡単な印象ですが、その他違いを簡単にまとめます。
- 処理スピードはBufferedReaderのほうが早い
- プリミティブデータ型を直接読み取るならScanner
- BufferedReaderは文字をバッファリングして、文字、配列、および行を読み取るのが得意
- バッファはBufferedReader (8192 chars)、Scannerは(1024 chars)
- BufferedReaderはスレッドセーフだがScannerはスレッドセーフではない
- Scsnnerは正規表現を使用してプリミティブ型および文字列の構文解析が可能
サンプル:Scanner s = new Scanner(input).useDelimiter(“\sfish\s”);
参考元:Scanner vs. BufferedReader
それぞれのクセを理解してうまく利用できるようになりたいものです。