Java

BufferedReaderとScannerでのコンソールからの文字入力方法を比較!Java初心者の勉強

Java icon

BufferedReaderでコンソールから文字入力方法を調べていたらScannerでの入力方法も気になってきたので2つの違いがわかればと比較してみたいと思います。

参考サイト:Difference between Scanner and BufferReader Class in Java

BufferedReaderでコンソールから文字入力

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でコンソールから文字入力

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

それぞれのクセを理解してうまく利用できるようになりたいものです。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です