Javaでキーボード入力から文字列を取得する。

Javaでキーボードから入力した値を文字列として取得する方法をまとめます。というか、そんなのググれば同じコードがいくらでも落ちているので、今更まとめる必要もないのだが書くことで自分自身の習得にもなるので書き残しておきます。

結論から書くとJavaでキーボード入力値を取得するにはBufferedReaderクラスと、InputStreamReaderクラスを使います。以下プログラム例

このプログラムは実行すると入力待ち状態となり、入力された文字列を表示して再度入力待ち状態になるを「exit」が入力されるまで繰り返します。

ここでポイントとなるのは、

の部分と、

の部分です。

ひとつずつ説明していきます。

 

・System.in
これはシステムクラスがもつstaticフィールドで標準入力を格納するためのInputStreamです。キーボードで入力した内容をバイトストリームで読み込み格納します。この段階では文字としてではなくバイトデータとして入力を読み込んでいます。そのため文字列を取得することができません。文字列を取得するには最低でも次の「InputStreamReader」に渡して変換する必要があります。

 

・InputStreamReader
InputStreamReaderは読んで字のごとくInputStreamを読み込むためのクラスです。読み込んだInputStreamはバイトストリームから文字ストリームへと変換されます。この段階から文字を抽出することができるようになるのでchar配列とオフセットおよび配列の長さを引数に配列に文字データをひとつ格納できます。ただ、これも結果的には効率の面でいい方法とはいえないため次の「BufferedReader」クラスを使って一行ずつ読み込みます。

 

・BufferedReader
BufferedReaderは文字、配列、行をバッファリングすることで文字型入力ストリームからテキストを効率よく読み込むことができるクラスです。InputStreamにある文字を一つずつ読み込む機能に加え一行単位で文字列を読み込むreadLineメソッドが用意されています。そのため基本はここまでInputStreamをラップして文字として出力させるというのが普通のやり方になります。readLineメソッドはIOExceptionを吐き出す可能性があるため例外をキャッチするか、そのままスローして上位に渡す処理を入れてください。

 

以上がキーボード入力した値を文字列として取得する方法です。簡単なプログラムでも深堀りして一つずつ説明すると勉強になりますね。。。KUJIRAでした。