標準入出力

Java – Scannerで複数行入力する方法

JavaでScannerを使用して複数行入力を受け取るには、ScannernextLine()メソッドを用います。

このメソッドは、改行文字が入力されるまでの文字列を取得します。

複数行を処理する場合、ループを使用してnextLine()を繰り返し呼び出します。

終了条件として特定の文字列(例: “exit”)を入力させる方法が一般的です。

複数行入力を受け取る方法

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

複数行の入力を受け取る場合、特に注意が必要です。

以下に、複数行の入力を受け取る方法を示します。

以下のコードは、ユーザーから複数行の入力を受け取り、”exit”と入力されるまで続けるプログラムです。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerオブジェクトを作成
        String input; // 入力を格納する変数
        System.out.println("複数行の入力をしてください。終了するには 'exit' と入力してください。");
        // 入力を受け取るループ
        while (true) {
            input = scanner.nextLine(); // 一行の入力を受け取る
            // 終了条件
            if (input.equals("exit")) {
                break; // ループを終了
            }
            // 入力内容を表示
            System.out.println("入力された内容: " + input);
        }
        scanner.close(); // Scannerを閉じる
    }
}

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

複数行の入力をしてください。終了するには 'exit' と入力してください。
こんにちは
入力された内容: こんにちは
お元気ですか?
入力された内容: お元気ですか?
exit

このプログラムでは、Scannerクラスを使用してユーザーからの入力を受け取ります。

nextLine()メソッドを使うことで、一行ずつ入力を取得し、”exit”と入力されるまでループを続けます。

入力された内容はその都度表示されます。

Scannerオブジェクトは、使用後に必ずclose()メソッドで閉じることが推奨されます。

入力終了条件の設定方法

複数行の入力を受け取る際には、どのように入力を終了するかを明確に設定することが重要です。

JavaのScannerクラスを使用する場合、特定のキーワードや条件を設定することで、ユーザーが入力を終了できるようにします。

以下に、いくつかの方法を示します。

特定のキーワードを使用する方法

特定のキーワード(例: “exit”)を入力することで、プログラムを終了させる方法です。

以下のサンプルコードでは、”exit”と入力された場合にループを終了します。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerオブジェクトを作成
        String input; // 入力を格納する変数
        System.out.println("入力を続けてください。終了するには 'exit' と入力してください。");
        while (true) {
            input = scanner.nextLine(); // 一行の入力を受け取る
            if (input.equals("exit")) { // 終了条件
                break; // ループを終了
            }
            System.out.println("入力された内容: " + input);
        }
        scanner.close(); // Scannerを閉じる
    }
}

空行を使用する方法

ユーザーが空行を入力することで、入力を終了する方法もあります。

この場合、空行が入力されたらループを終了します。

以下のサンプルコードを参照してください。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerオブジェクトを作成
        String input; // 入力を格納する変数
        System.out.println("入力を続けてください。空行で終了します。");
        while (true) {
            input = scanner.nextLine(); // 一行の入力を受け取る
            if (input.isEmpty()) { // 空行が入力された場合
                break; // ループを終了
            }
            System.out.println("入力された内容: " + input);
        }
        scanner.close(); // Scannerを閉じる
    }
}

特定の条件を使用する方法

特定の条件(例: 入力された文字数が一定以上)を満たす場合に終了する方法もあります。

以下のサンプルコードでは、入力された文字数が10文字以上の場合にループを終了します。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerオブジェクトを作成
        String input; // 入力を格納する変数
        System.out.println("入力を続けてください。10文字以上で終了します。");
        while (true) {
            input = scanner.nextLine(); // 一行の入力を受け取る
            if (input.length() >= 10) { // 文字数が10以上の場合
                break; // ループを終了
            }
            System.out.println("入力された内容: " + input);
        }
        scanner.close(); // Scannerを閉じる
    }
}

上記の方法を使用することで、ユーザーが入力を終了する条件を柔軟に設定できます。

特定のキーワード、空行、または文字数など、状況に応じて適切な終了条件を選択することが重要です。

これにより、ユーザーにとって使いやすいインターフェースを提供できます。

実装時の注意点

JavaのScannerクラスを使用して複数行の入力を受け取る際には、いくつかの注意点があります。

これらを理解しておくことで、より安定したプログラムを作成することができます。

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

入力ストリームの管理

Scannerオブジェクトを使用した後は、必ずclose()メソッドを呼び出してリソースを解放することが重要です。

これを怠ると、メモリリークやリソースの無駄遣いにつながる可能性があります。

scanner.close(); // Scannerを閉じる

入力のバリデーション

ユーザーからの入力は予期しない形式であることが多いため、入力内容のバリデーションを行うことが重要です。

例えば、数値を期待している場合は、hasNextInt()メソッドを使用して、整数が入力されているかを確認することができます。

if (scanner.hasNextInt()) {
    int number = scanner.nextInt(); // 整数を取得
} else {
    System.out.println("無効な入力です。整数を入力してください。");
    scanner.next(); // 不正な入力を消費
}

エンコーディングの考慮

特に日本語などのマルチバイト文字を扱う場合、入力のエンコーディングに注意が必要です。

デフォルトでは、Scannerはシステムのデフォルトエンコーディングを使用しますが、必要に応じてInputStreamReaderを使用してエンコーディングを指定することができます。

import java.io.InputStreamReader; // InputStreamReaderをインポート
import java.nio.charset.StandardCharsets; // StandardCharsetsをインポート
Scanner scanner = new Scanner(new InputStreamReader(System.in, StandardCharsets.UTF_8)); // UTF-8で入力を受け取る

例外処理の実装

ユーザーからの入力は予期しないエラーを引き起こす可能性があるため、例外処理を実装することが重要です。

try-catchブロックを使用して、入力エラーを適切に処理することができます。

try {
    int number = scanner.nextInt(); // 整数を取得
} catch (Exception e) {
    System.out.println("入力エラーが発生しました: " + e.getMessage());
    scanner.next(); // 不正な入力を消費
}

入力の終了条件の明示化

ユーザーがどのように入力を終了できるかを明示的に示すことが重要です。

例えば、プログラムの開始時に終了条件を説明するメッセージを表示することで、ユーザーが混乱しないようにします。

System.out.println("入力を続けてください。終了するには 'exit' と入力してください。");

これらの注意点を考慮することで、ユーザーにとって使いやすく、エラーの少ないプログラムを作成することができます。

特に、入力のバリデーションや例外処理は、プログラムの堅牢性を高めるために非常に重要です。

応用例

JavaのScannerクラスを使用して複数行の入力を受け取る方法は、さまざまなアプリケーションに応用できます。

以下に、いくつかの具体的な応用例を示します。

ユーザーのプロフィール情報の収集

ユーザーから名前、年齢、趣味などのプロフィール情報を複数行にわたって収集するプログラムの例です。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerオブジェクトを作成
        String name, age, hobbies; // プロフィール情報を格納する変数
        System.out.println("プロフィール情報を入力してください。終了するには 'exit' と入力してください。");
        System.out.print("名前: ");
        name = scanner.nextLine(); // 名前を入力
        System.out.print("年齢: ");
        age = scanner.nextLine(); // 年齢を入力
        System.out.println("趣味を入力してください。空行で終了します。");
        StringBuilder hobbiesBuilder = new StringBuilder(); // 趣味を格納するためのStringBuilder
        while (true) {
            String hobby = scanner.nextLine(); // 趣味を一行ずつ入力
            if (hobby.isEmpty()) { // 空行が入力された場合
                break; // ループを終了
            }
            hobbiesBuilder.append(hobby).append(", "); // 趣味を追加
        }
        hobbies = hobbiesBuilder.toString(); // 趣味を文字列に変換
        // 入力内容を表示
        System.out.println("プロフィール情報:");
        System.out.println("名前: " + name);
        System.out.println("年齢: " + age);
        System.out.println("趣味: " + hobbies);
        
        scanner.close(); // Scannerを閉じる
    }
}

複数の数値の合計を計算

ユーザーから複数の数値を入力させ、その合計を計算するプログラムの例です。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerオブジェクトを作成
        double sum = 0; // 合計を格納する変数
        String input; // 入力を格納する変数
        System.out.println("数値を入力してください。終了するには 'exit' と入力してください。");
        while (true) {
            input = scanner.nextLine(); // 一行の入力を受け取る
            if (input.equals("exit")) { // 終了条件
                break; // ループを終了
            }
            try {
                double number = Double.parseDouble(input); // 入力を数値に変換
                sum += number; // 合計に加算
            } catch (NumberFormatException e) {
                System.out.println("無効な入力です。数値を入力してください。");
            }
        }
        // 合計を表示
        System.out.println("合計: " + sum);
        
        scanner.close(); // Scannerを閉じる
    }
}

テキストファイルへの書き込み

ユーザーからの入力を受け取り、それをテキストファイルに書き込むプログラムの例です。

import java.util.Scanner; // Scannerクラスをインポート
import java.io.FileWriter; // FileWriterをインポート
import java.io.IOException; // IOExceptionをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerオブジェクトを作成
        String input; // 入力を格納する変数
        System.out.println("テキストファイルに書き込む内容を入力してください。空行で終了します。");
        try (FileWriter writer = new FileWriter("output.txt")) { // FileWriterを作成
            while (true) {
                input = scanner.nextLine(); // 一行の入力を受け取る
                if (input.isEmpty()) { // 空行が入力された場合
                    break; // ループを終了
                }
                writer.write(input + System.lineSeparator()); // 入力をファイルに書き込む
            }
        } catch (IOException e) {
            System.out.println("ファイル書き込みエラー: " + e.getMessage());
        }
        System.out.println("入力内容がoutput.txtに書き込まれました。");
        
        scanner.close(); // Scannerを閉じる
    }
}

これらの応用例は、Scannerクラスを使用して複数行の入力を受け取る方法を示しています。

ユーザーのプロフィール情報の収集、数値の合計計算、テキストファイルへの書き込みなど、さまざまなシナリオで活用できます。

これにより、ユーザーとのインタラクションを豊かにし、実用的なアプリケーションを構築することが可能です。

まとめ

この記事では、JavaのScannerクラスを使用して複数行の入力を受け取る方法について詳しく解説しました。

具体的には、入力終了条件の設定や実装時の注意点、さらには実際の応用例を通じて、実践的な知識を提供しました。

これを機に、実際のプログラムにScannerを活用し、ユーザーとのインタラクションをより豊かにするための新たな挑戦をしてみてはいかがでしょうか。

関連記事

Back to top button