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