Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで標準入力からデータを読み取る方法|BufferedReaderとScannerの使い方を解説

Javaにおける標準入力(System.in)とは

Javaでは、標準入力(stdin)はSystem.inによって表されます。System.inInputStreamクラスのインスタンスであり、そのメソッドはすべてバイト単位で動作するため、文字列としてそのまま扱うことはできません。

そこで、キーボードからデータを読み取る際には、一般的に次の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の使い分け

比較項目BufferedReaderScanner
所属パッケージjava.iojava.util
読み取り速度高速(バッファリングあり)やや遅め
例外処理IOExceptionのtry-catchが必要基本的に不要
主な用途大量のテキスト処理など簡易的なユーザー入力など

大量のデータを高速に処理したい場合はBufferedReader、手軽にユーザー入力を受け付けたい場合はScannerを選ぶとよいでしょう。いずれの方法でも、System.inをラップすることでキーボードからの標準入力を簡単かつ柔軟に読み取ることができます。

  1. JavaのJMenuからJTabbedPaneに新しいタブを追加する方法

    JTabbedPaneとはJTabbedPaneは、JComponentクラスを継承したSwingコンポーネントの一つで、複数のパネルをタブ形式で簡単に切り替えられるようにするUI部品です。各タブには1つのコンポーネントが関連付けられており、そのタブが選択されると対応するコンポーネントが表示されます。JTabbedPaneは、タブが選択されたタイミングでChangeListenerインターフェースを通じてイベントを発生させることができます。JTabbedPaneの主なメソッドには、add()、addTab()、fireStateChanged()、createChangeListener()、

  2. JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説

    JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー