Javaで標準入力からデータを読み取る方法|BufferedReaderとScannerの使い方を解説
Javaにおける標準入力(System.in)とは
Javaでは、標準入力(stdin)はSystem.inによって表されます。System.inはInputStreamクラスのインスタンスであり、そのメソッドはすべてバイト単位で動作するため、文字列としてそのまま扱うことはできません。
そこで、キーボードからデータを読み取る際には、一般的に次の2つのクラスが使われます。
- BufferedReaderクラス:InputStreamReaderと組み合わせて使用し、readLine()メソッドで1行ずつ効率よく読み取ります。IOExceptionの例外処理が必要です。
- Scannerクラス:java.utilパッケージに含まれており、nextInt()やnextLine()など直感的なメソッドで手軽に入力を読み取れます。
以下、それぞれの具体例を見ていきましょう。
例1:BufferedReaderを使って標準入力から読み取る
import java.io.*;
public class ReadDataFromInput {
public static void main(String[] args) {
int firstNum, secondNum, result;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("最初の数値を入力してください:");
firstNum = Integer.parseInt(br.readLine());
System.out.println("2番目の数値を入力してください:");
secondNum = Integer.parseInt(br.readLine());
result = firstNum * secondNum;
System.out.println("計算結果は:" + result);
} catch (IOException ioe) {
System.out.println(ioe);
}
}
}
実行結果
最初の数値を入力してください:
15
2番目の数値を入力してください:
20
計算結果は:300
このコードでは、new BufferedReader(new InputStreamReader(System.in))という形で、バイトストリームであるSystem.inを文字ストリームに変換し、さらにバッファリング機能を追加しています。br.readLine()はキーボードから入力された1行を文字列として返すため、Integer.parseInt()でint型に変換してから掛け算を行っています。また、readLine()はIOExceptionをスローする可能性があるため、try-catchによる例外処理が必須である点にも注意しましょう。
例2:Scannerを使って標準入力から読み取る
import java.util.*;
public class ReadDataFromScanner {
public static void main(String[] args) {
int firstNum, secondNum, result;
Scanner scanner = new Scanner(System.in);
System.out.println("最初の数値を入力してください:");
firstNum = Integer.parseInt(scanner.nextLine());
System.out.println("2番目の数値を入力してください:");
secondNum = Integer.parseInt(scanner.nextLine());
result = firstNum * secondNum;
System.out.println("計算結果は:" + result);
}
}
実行結果
最初の数値を入力してください:
20
2番目の数値を入力してください:
25
計算結果は:500
Scannerクラスはjava.utilパッケージに属しているため、import文でjava.util.*を読み込むだけで利用できます。上記の例ではBufferedReaderの場合と同様にnextLine()とparseInt()を組み合わせていますが、ScannerにはnextInt()という便利なメソッドが用意されており、これを使えば文字列から数値への変換(Integer.parseInt())自体が不要になります。
firstNum = scanner.nextInt(); // 直接int型として読み取れる
まとめ:BufferedReaderとScannerの使い分け
| 比較項目 | BufferedReader | Scanner |
|---|---|---|
| 所属パッケージ | java.io | java.util |
| 読み取り速度 | 高速(バッファリングあり) | やや遅め |
| 例外処理 | IOExceptionのtry-catchが必要 | 基本的に不要 |
| 主な用途 | 大量のテキスト処理など | 簡易的なユーザー入力など |
大量のデータを高速に処理したい場合はBufferedReader、手軽にユーザー入力を受け付けたい場合はScannerを選ぶとよいでしょう。いずれの方法でも、System.inをラップすることでキーボードからの標準入力を簡単かつ柔軟に読み取ることができます。
-
JavaのJMenuからJTabbedPaneに新しいタブを追加する方法
JTabbedPaneとはJTabbedPaneは、JComponentクラスを継承したSwingコンポーネントの一つで、複数のパネルをタブ形式で簡単に切り替えられるようにするUI部品です。各タブには1つのコンポーネントが関連付けられており、そのタブが選択されると対応するコンポーネントが表示されます。JTabbedPaneは、タブが選択されたタイミングでChangeListenerインターフェースを通じてイベントを発生させることができます。JTabbedPaneの主なメソッドには、add()、addTab()、fireStateChanged()、createChangeListener()、
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー