Java Scanner クラス
java.util.Scanner は Java 5 の新機能で、Scanner クラスを通じてユーザーの入力を受け取ることができます。
以下は Scanner オブジェクトを作成する基本的な構文です:
次に、最も簡単なデータ入力をデモし、Scanner クラスの next() と nextLine() メソッドで入力された文字列を取得します。読み取り前に、通常は hasNext と hasNextLine を使用して、まだ入力データがあるかどうかを判断する必要があります:
next メソッドを使用:
ScannerDemo.java ファイルコード:
上記のプログラムを実行すると、出力結果は次のようになります:
$ javac ScannerDemo.java $ java ScannerDemo next方式接收: サンプル com 输入的数据为:サンプル
com という文字列が出力されていないことがわかります。次に nextLine を見てみましょう。
nextLine メソッドを使用:
ScannerDemo.java ファイルコード:
上記のプログラムを実行すると、出力結果は次のようになります:
$ javac ScannerDemo.java $ java ScannerDemo nextLine方式接收: サンプル com 输入的数据为:サンプル com
com という文字列が出力されていることがわかります。
next() と nextLine() の違い
next():
- 1. 有効な文字を読み取った後でなければ入力を終了できません。
- 2. 有効な文字の前にある空白は、next() メソッドが自動的に除去します。
- 3. 有効な文字を入力した後に、その後の空白を区切り文字または終了文字として扱います。
- next() は空白を含む文字列を取得できません。
nextLine():
- 1. Enter を終了文字とします。つまり、nextLine() メソッドは Enter を入力する前のすべての文字を返します。
- 2. 空白を取得できます。
int 型や float 型のデータを入力する場合も Scanner クラスでサポートされていますが、入力する前に hasNextXxx() メソッドで検証してから、nextXxx() を使用して読み取るのが最善です:
ScannerDemo.java ファイルコード:
上記のプログラムを実行すると、出力結果は次のようになります:
$ javac ScannerDemo.java $ java ScannerDemo 输入整数:12 整数数据:12 输入小数:1.2 小数数据:1.2
次の例では、複数の数字を入力し、その合計と平均を求めます。数字を入力するたびに Enter で確定し、数字以外を入力することで入力を終了して実行結果を出力します:
ScannerDemo.java ファイルコード:
上記のプログラムを実行すると、出力結果は次のようになります(数字以外を入力して入力を終了します):
$ javac ScannerDemo.java $ java ScannerDemo 请输入数字: 12 23 15 21.4 end 4个数的和为71.4 4个数的平均值是17.85
よく使うメソッド
| メソッド | 説明 |
|---|---|
| コンストラクタ | |
Scanner(File source) |
ファイルから Scanner を作成 |
Scanner(InputStream source) |
入力ストリームから Scanner を作成 |
Scanner(String source) |
文字列から Scanner を作成 |
| 基本入力メソッド | |
boolean hasNext() |
次のトークンがあるかどうかを確認(空白区切り) |
String next() |
次のトークン(文字列)を読み取る |
boolean hasNextLine() |
次の行があるかどうかを確認 |
String nextLine() |
次の行の内容を読み取る |
| 型チェックメソッド | |
boolean hasNextInt() |
次のトークンが整数かどうかを確認 |
boolean hasNextDouble() |
次のトークンが倍精度浮動小数点数かどうかを確認 |
boolean hasNextBoolean() |
次のトークンがブール値かどうかを確認 |
| 型読み取りメソッド | |
int nextInt() |
次の整数を読み取る |
double nextDouble() |
次の倍精度浮動小数点数を読み取る |
boolean nextBoolean() |
次のブール値を読み取る |
long nextLong() |
次の長整数を読み取る |
float nextFloat() |
次の単精度浮動小数点数を読み取る |
short nextShort() |
次の短整数を読み取る |
byte nextByte() |
次のバイトを読み取る |
| 区切り文字の制御 | |
Scanner useDelimiter(String pattern) |
区切り文字パターンを設定 |
Scanner useDelimiter(Pattern pattern) |
正規表現を使用して区切り文字を設定 |
String delimiter() |
現在使用している区切り文字パターンを返す |
| その他のメソッド | |
void close() |
スキャナを閉じる |
Scanner skip(Pattern pattern) |
指定したパターンに一致する入力をスキップ |
Scanner skip(String pattern) |
指定した文字列に一致する入力をスキップ |
String findInLine(Pattern pattern) |
現在の行で指定したパターンを検索 |
String findInLine(String pattern) |
現在の行で指定した文字列を検索 |
Scanner reset() |
スキャナをリセット |
Locale locale() |
スキャナが現在使用しているロケールを返す |
Scanner useLocale(Locale locale) |
スキャナのロケールを設定 |
詳細は API ドキュメントを参照してください:https://www.example.com/manual/jdk11api/java.base/java/util/Scanner.html。
その他の拡張