入力を受け付ける練習

2016年11月12日Javaプログラミングの練習

スポンサーリンク

こんにちは。「Javaを復習する初心者」です。今回はコンソール画面から入力を受け付けるプログラムの書き方について確認しました。

スポンサーリンク

System.in.read()

最初に確認したことは、System.in.read()という行が最初に実行されると入力待ちになることです。Systemオブジェクトがinという名前のフィールドを持ちます。修飾子と型はstatic InputStreamです。このクラスがread()メソッドを持ちます。修飾子と型はabstract intです。抽象メソッドなのですが、使うことができます。どういう仕組みになっているのか、わかりませんでしたが、気にしないことにします。

API仕様書によると、このread()メソッドは「入力ストリームからデータの次のバイトを読み込みます。」と有ります。では次のようなプログラムを書き、「a」を入力するとどのような結果になるでしょうか。

        System.out.println(System.in.read());
        System.out.println(System.in.read());
        System.out.println(System.in.read());

出力の部分は以下のようになります。

97
13
10

これは10進数の値で、16進数に直すとそれぞれ61、d、aです。dはCR、aはLFで改行コードです。Enterキーで入力確定したときの改行コードを拾ってくれるようです。

InputStreamReaderとBufferedReader

次に確認したのが、InputStreamReaderとBufferedReaderを使う方法です。以下のような書き方です。

        String str;
        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        str = bufferedReader.readLine();
        System.out.println(str);

この方法の場合、入力した文字のみが出力されます。API仕様書によると、BufferedReader#readLine()は「テキスト行を読み込みます。」という機能です。String型を返却します。ソースを見てみましたが、何やら改行コードはスキップするような仕組みになっているようです。

Scanner

最後に確認したのが、Scannerクラスです。バージョン1.5で追加されたAPIのようです。

        String str;
        Scanner scan = new Scanner(System.in);
        str = scan.next();
        scan.close();
        System.out.println(str);

next()メソッドで入力が得られるようです。詳しいことはわかりませんでしたが、コードは短くなりました。

スポンサーリンク