Javaのスキャナクラス
Java では、Scanner は、int、double などのプリミティブ型および文字列の入力を取得するために使用される java.util パッケージ内のクラスです。
Java で Scanner クラスを使用するのは、Java プログラムで入力を読み取る最も簡単な方法ですが、競技プログラミングのように時間に制約があるシナリオで入力メソッドが必要な場合は、あまり効率的ではありません。
Java スキャナーの入力タイプ
Scanner クラスは、Java の標準入力ストリームを取得するのに役立ちます。したがって、ストリームからデータを抽出するいくつかのメソッドが必要です。データの抽出に使用されるメソッドを以下に示します。
| 方法 | 説明 |
|---|---|
| nextBoolean() | ブール値の読み取りに使用されます |
| nextByte() | バイト値の読み取りに使用されます |
| nextDouble() | Double 値の読み取りに使用されます |
| nextFloat() | Float 値の読み取りに使用されます |
| nextInt() | Int値の読み取りに使用されます |
| ライン値の読み取りに使用されます | |
| nextLong() | Long 値の読み取りに使用されます |
| nextShort() | Short 値の読み取りに使用されます |
さまざまなデータ型のデータを読み取るためのコードスニペットを見てみましょう。
Javaスキャナクラスの例
例 1:
ジャワ
// Java program to read data of various types> // using Scanner class.> import> java.util.Scanner;> // Driver Class> public> class> ScannerDemo1 {> > // main function> > public> static> void> main(String[] args)> > {> > // Declare the object and initialize with> > // predefined standard input object> > Scanner sc => new> Scanner(System.in);> > // String input> > String name = sc.nextLine();> > // Character input> > char> gender = sc.next().charAt(> 0> );> > // Numerical data input> > // byte, short and float can be read> > // using similar-named functions.> > int> age = sc.nextInt();> > long> mobileNo = sc.nextLong();> > double> cgpa = sc.nextDouble();> > // Print the values to check if the input was> > // correctly obtained.> > System.out.println(> 'Name: '> + name);> > System.out.println(> 'Gender: '> + gender);> > System.out.println(> 'Age: '> + age);> > System.out.println(> 'Mobile Number: '> + mobileNo);> > System.out.println(> 'CGPA: '> + cgpa);> > }> }> |
入力
Geek F 40 9876543210 9.9
出力
Name: Geek Gender: F Age: 40 Mobile Number: 9876543210 CGPA: 9.9
場合によっては、次に読み取る値が特定の型であるかどうか、または入力が終了したか (EOF マーカーが検出されたか) を確認する必要があります。
次に、hasNextXYZ() 関数を使用して、スキャナの入力が必要なタイプであるかどうかを確認します。XYZ は対象のタイプです。この関数は、スキャナがそのタイプのトークンを持っている場合は true を返し、そうでない場合は false を返します。たとえば、以下のコードでは hasNextInt() を使用しています。文字列をチェックするには、hasNextLine() を使用します。同様に、単一の文字をチェックするには、hasNext().charAt(0) を使用します。
例 2:
コンソールからいくつかの数値を読み取り、その平均値を出力するコード スニペットを見てみましょう。
ジャワ
// Java program to read some values using Scanner> // class and print their mean.> import> java.util.Scanner;> public> class> ScannerDemo2 {> > public> static> void> main(String[] args)> > {> > // Declare an object and initialize with> > // predefined standard input object> > Scanner sc => new> Scanner(System.in);> > // Initialize sum and count of input elements> > int> sum => 0> , count => 0> ;> > // Check if an int value is available> > while> (sc.hasNextInt()) {> > // Read an int value> > int> num = sc.nextInt();> > sum += num;> > count++;> > }> > if> (count>>> 0> ) {> > int> mean = sum / count;> > System.out.println(> 'Mean: '> + mean);> > }> > else> {> > System.out.println(> > 'No integers were input. Mean cannot be calculated.'> );> > }> > }> }> |
入力
1 2 3 4 5
出力
Mean: 3
Javaスキャナクラスに関する重要なポイント
- Scanner クラスのオブジェクトを作成するには、通常、標準入力ストリームを表す事前定義オブジェクト System.in を渡します。ファイルから入力を読み取りたい場合は、File クラスのオブジェクトを渡すことができます。
- 特定のデータ型 XYZ の数値を読み取るには、nextXYZ() 関数を使用します。たとえば、short 型の値を読み取るには、nextShort() を使用できます。
- 文字列を読み取るには、nextLine() を使用します。
- 単一の文字を読み取るには、next().charAt(0) を使用します。 next() 関数は入力内の次のトークン/単語を文字列として返し、charAt(0) 関数はその文字列の最初の文字を返します。
- Scanner クラスは行全体を読み取り、その行をトークンに分割します。トークンは、Java コンパイラにとって何らかの意味を持つ小さな要素です。たとえば、次のような入力文字列があるとします。
この場合、スキャナ オブジェクトは行全体を読み取り、文字列をトークン (How、are、you) に分割します。次に、オブジェクトは各トークンを反復処理し、さまざまなメソッドを使用して各トークンを読み取ります。