標準入出力

Java – 入力を読み取るScannerクラスの使い方を解説

JavaのScannerクラスは、ユーザー入力やファイルからデータを読み取るために使用されます。

java.util.Scannerをインポートして利用します。

System.inを引数に渡すことで、標準入力(キーボード)からデータを取得可能です。

例えば、nextLine()で文字列、nextInt()で整数、nextDouble()で小数を読み取ります。

入力後はclose()でリソースを解放するのが推奨されます。

Scannerクラスの基本的な使い方

JavaのScannerクラスは、ユーザーからの入力を簡単に読み取るための便利なクラスです。

主にコンソールからの入力を処理する際に使用されます。

以下に、Scannerクラスの基本的な使い方を解説します。

Scannerクラスのインポート

Scannerクラスを使用するためには、まずjava.utilパッケージからインポートする必要があります。

以下のように記述します。

import java.util.Scanner; // Scannerクラスをインポート

Scannerクラスのインスタンス化

Scannerクラスのインスタンスを作成するには、newキーワードを使用します。

コンソールからの入力を受け取るためには、System.inを引数に渡します。

Scanner scanner = new Scanner(System.in); // Scannerのインスタンスを作成

基本的な入力メソッド

Scannerクラスには、さまざまな入力メソッドがあります。

以下は、主なメソッドの一覧です。

メソッド名説明
nextLine()1行の文字列を読み取る
nextInt()整数を読み取る
nextDouble()小数を読み取る
nextBoolean()真偽値を読み取る

以下は、Scannerクラスを使用してユーザーからの入力を読み取る簡単なプログラムの例です。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerのインスタンスを作成
        System.out.print("名前を入力してください: "); // ユーザーに名前を入力させる
        String name = scanner.nextLine(); // 入力された名前を読み取る
        System.out.print("年齢を入力してください: "); // ユーザーに年齢を入力させる
        int age = scanner.nextInt(); // 入力された年齢を読み取る
        // 入力された情報を表示
        System.out.println("こんにちは、" + name + "さん!あなたは" + age + "歳です。");
        scanner.close(); // Scannerを閉じる
    }
}

このプログラムを実行すると、以下のような出力が得られます。

名前を入力してください: 山田
年齢を入力してください: 25
こんにちは、山田さん!あなたは25歳です。

このように、Scannerクラスを使用することで、簡単にユーザーからの入力を受け取ることができます。

Scannerクラスの応用的な使い方

Scannerクラスは、基本的な入力処理だけでなく、さまざまな応用的な使い方が可能です。

ここでは、複数のデータ型の入力や、ファイルからの入力、例外処理について解説します。

複数のデータ型の入力

Scannerクラスを使用すると、異なるデータ型の入力を同時に処理することができます。

以下のように、複数の入力メソッドを組み合わせて使用します。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerのインスタンスを作成
        System.out.print("名前を入力してください: "); // ユーザーに名前を入力させる
        String name = scanner.nextLine(); // 入力された名前を読み取る
        System.out.print("年齢を入力してください: "); // ユーザーに年齢を入力させる
        int age = scanner.nextInt(); // 入力された年齢を読み取る
        System.out.print("身長を入力してください (cm): "); // ユーザーに身長を入力させる
        double height = scanner.nextDouble(); // 入力された身長を読み取る
        // 入力された情報を表示
        System.out.println("こんにちは、" + name + "さん!あなたは" + age + "歳で、身長は" + height + "cmです。");
        scanner.close(); // Scannerを閉じる
    }
}

このプログラムを実行すると、以下のような出力が得られます。

名前を入力してください: 佐藤
年齢を入力してください: 30
身長を入力してください (cm): 175.5
こんにちは、佐藤さん!あなたは30歳で、身長は175.5cmです。

ファイルからの入力

Scannerクラスは、ファイルからの入力もサポートしています。

ファイルを読み込むには、Fileクラスを使用してScannerのインスタンスを作成します。

以下はその例です。

import java.io.File; // Fileクラスをインポート
import java.io.FileNotFoundException; // FileNotFoundExceptionをインポート
import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        try {
            File file = new File("input.txt"); // 読み込むファイルを指定
            Scanner scanner = new Scanner(file); // ファイルからScannerのインスタンスを作成
            while (scanner.hasNextLine()) { // ファイルの内容を行ごとに読み取る
                String line = scanner.nextLine(); // 1行を読み取る
                System.out.println(line); // 読み取った行を表示
            }
            scanner.close(); // Scannerを閉じる
        } catch (FileNotFoundException e) {
            System.out.println("ファイルが見つかりませんでした。"); // エラーメッセージ
        }
    }
}

input.txtファイルの内容が以下のような場合、プログラムを実行すると次のような出力が得られます。

こんにちは、世界!
Javaプログラミングを楽しもう!

例外処理

Scannerクラスを使用する際には、入力が期待した形式でない場合に備えて例外処理を行うことが重要です。

以下は、整数の入力を期待する場合の例外処理の例です。

import java.util.InputMismatchException; // InputMismatchExceptionをインポート
import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerのインスタンスを作成
        System.out.print("年齢を入力してください: "); // ユーザーに年齢を入力させる
        try {
            int age = scanner.nextInt(); // 入力された年齢を読み取る
            System.out.println("あなたは" + age + "歳です。");
        } catch (InputMismatchException e) {
            System.out.println("無効な入力です。整数を入力してください。"); // エラーメッセージ
        } finally {
            scanner.close(); // Scannerを閉じる
        }
    }
}

このプログラムを実行し、無効な入力(例えば文字列)を行った場合、以下のような出力が得られます。

年齢を入力してください: abc
無効な入力です。整数を入力してください。

このように、Scannerクラスは多様な入力処理に対応しており、さまざまなシナリオで活用できます。

Scannerクラスを使用する際の注意点

Scannerクラスは非常に便利ですが、使用する際にはいくつかの注意点があります。

これらを理解しておくことで、より効果的にScannerを活用できます。

以下に主な注意点を挙げます。

入力ストリームの閉じ方

Scannerを使用した後は、必ずclose()メソッドを呼び出してリソースを解放する必要があります。

特にSystem.inを使用している場合、close()を呼び出すとプログラム全体でSystem.inが使用できなくなるため、注意が必要です。

Scanner scanner = new Scanner(System.in); // Scannerのインスタンスを作成
// ... 入力処理 ...
scanner.close(); // リソースを解放
// 以降、System.inは使用できない

入力形式の確認

Scannerクラスは、入力が期待した形式でない場合にエラーを引き起こすことがあります。

特にnextInt()nextDouble()などのメソッドを使用する際は、入力が整数や小数であることを確認する必要があります。

これを怠ると、InputMismatchExceptionが発生します。

改行文字の扱い

nextLine()メソッドを使用する際、前の入力メソッド(例えばnextInt())が改行文字を残すため、意図しない動作を引き起こすことがあります。

これを避けるためには、nextInt()の後にnextLine()を追加して改行を消化することが推奨されます。

int age = scanner.nextInt(); // 整数を読み取る
scanner.nextLine(); // 改行を消化
String name = scanner.nextLine(); // 名前を読み取る

例外処理の実装

ユーザーからの入力は予測不可能な場合が多いため、例外処理を実装することが重要です。

特に、数値を期待する場合はtry-catchブロックを使用して、無効な入力に対処することが推奨されます。

try {
    int age = scanner.nextInt(); // 整数を読み取る
} catch (InputMismatchException e) {
    System.out.println("無効な入力です。整数を入力してください。"); // エラーメッセージ
}

スペースや改行の扱い

next()メソッドは、スペースで区切られた単語を読み取りますが、nextLine()メソッドは行全体を読み取ります。

このため、複数の単語を含む入力を処理する際は、適切なメソッドを選択することが重要です。

ストリームの種類

Scannerクラスは、InputStreamFileStringなど、さまざまなソースから入力を受け取ることができますが、使用するソースによって動作が異なる場合があります。

特にファイルからの入力では、ファイルが存在しない場合や読み取り権限がない場合に注意が必要です。

これらの注意点を理解し、適切に対処することで、Scannerクラスをより効果的に活用することができます。

実践例:Scannerクラスを使った簡単なプログラム

ここでは、Scannerクラスを使用して、ユーザーからの入力を受け取り、簡単な計算を行うプログラムの実例を示します。

このプログラムでは、ユーザーに2つの数値を入力させ、その合計を計算して表示します。

以下のコードは、Scannerクラスを使用して2つの整数を読み取り、その合計を計算するプログラムです。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerのインスタンスを作成
        System.out.print("1つ目の整数を入力してください: "); // ユーザーに1つ目の整数を入力させる
        int firstNumber = scanner.nextInt(); // 入力された1つ目の整数を読み取る
        System.out.print("2つ目の整数を入力してください: "); // ユーザーに2つ目の整数を入力させる
        int secondNumber = scanner.nextInt(); // 入力された2つ目の整数を読み取る
        // 合計を計算
        int sum = firstNumber + secondNumber; // 合計を計算
        // 結果を表示
        System.out.println("合計は " + sum + " です。"); // 合計を表示
        scanner.close(); // Scannerを閉じる
    }
}

このプログラムを実行すると、以下のような出力が得られます。

ユーザーが入力した値に応じて結果が変わります。

1つ目の整数を入力してください: 5
2つ目の整数を入力してください: 10
合計は 15 です。

プログラムの解説

  1. インポート文: Scannerクラスを使用するために、java.util.Scannerをインポートします。
  2. Scannerのインスタンス化: Scannerのインスタンスを作成し、System.inを引数に渡してコンソールからの入力を受け取ります。
  3. ユーザー入力の取得: nextInt()メソッドを使用して、ユーザーから2つの整数を読み取ります。
  4. 合計の計算: 読み取った2つの整数を加算し、合計を計算します。
  5. 結果の表示: 計算した合計をコンソールに表示します。
  6. リソースの解放: 最後に、close()メソッドを呼び出してScannerを閉じます。

このように、Scannerクラスを使用することで、ユーザーからの入力を簡単に処理し、さまざまなアプリケーションに応用することができます。

まとめ

この記事では、JavaのScannerクラスの基本的な使い方から応用的な利用法、注意点まで幅広く解説しました。

特に、ユーザーからの入力を効率的に処理するためのテクニックや、ファイルからの入力方法、例外処理の重要性についても触れました。

これを機に、実際のプログラムにScannerクラスを取り入れて、インタラクティブなアプリケーションを作成してみてはいかがでしょうか。

関連記事

Back to top button