こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

入力を受け付ける練習

こんにちは。「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()メソッドで入力が得られるようです。詳しいことはわかりませんでしたが、コードは短くなりました。