Javaでスキャナーを使用する方法

How Use Scanner Java



JavaのScannerは、java.utilパッケージのクラスです。このクラスは、文字列、キーボード、ファイル、またはネットワークソケットからの入力を読み取ることを目的としています。この記事では、キーボードからの入力を読み取り、ターミナルウィンドウに結果を表示することにのみ焦点を当てています。同様のアイデアを使用して、ファイルまたはネットワークチャネルから入力を読み取ることができます。スキャナーはターミナルウィンドウに印刷されません。端末に印刷するには、System.outオブジェクトを使用します。以下に示すように、このオブジェクトを使用して端末に印刷するのは簡単です。

Scannerクラスを使用するには、最初にインポートする必要があります。その後、オブジェクトをインスタンス化する必要があります。 Scannerオブジェクトを使用した後、それを閉じる必要があります。キーボードを表す入力ストリームオブジェクトはSystem.inです。スキャナーには多くの方法があります。この記事では、一般的に使用されるもののみを説明します。







記事の内容



スキャナークラスの簡単な使用

次のコードは、ユーザーに文を入力するように求め、文を表示します。



輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
スキャナーscanObj= 新着スキャナー(( システム)。;
システムアウトprintln((「文を入力してEnterキーを押します:」)。;

=scanObj。nextLine(()。;
システムアウトprintln(()。;

scanObj。選ぶ(()。;
}
}

最初の行はScannerクラスをインポートします。 main関数の最初の行は、キーボードのSystem.inオブジェクトを使用してスキャナーオブジェクトを作成します。スキャナーオブジェクトが作成されるとすぐに、入力の待機を開始します。次の行は、ユーザーに文を入力するように求めるステートメントを出力します。コードの次の行は、スキャナーオブジェクトのnextLine()メソッドを使用して、ユーザーがEnterキーを押した後に文を読み取ります。コード内の次の行は、ターミナルウィンドウで文を再印刷します。最後の行はスキャナーオブジェクトを閉じます。





入力行を値に吐き出す

次のコードは、スペースを区切り文字として使用して、入力行を単語(トークン)に分割します。

輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
スキャナーscanObj= 新着スキャナー(( システム)。;
システムアウトprintln(('トークンの行を入力し、Enterキーを押します:')。;

その間((scanObj。hasNext(()。)。{{
システムアウトprintln((scanObj。(()。)。;
}

scanObj。選ぶ(()。;
}
}

hasNext()とnext()は、スキャナーオブジェクトの他の2つのメソッドです。スキャナーオブジェクトが行を読み取るとき、それを保持します。 next()は次のトークン(ワード)にアクセスします。 hasNext()は、まだアクセスされていない他のトークンがある場合にtrueを返します。



残念ながら、ユーザーはこのコードで分割して再表示するための入力を入力する必要があります。それをすべて終了するには、Ctrl + zを押すと、コマンドプロンプトに戻るはずです。

上記のコードでは、区切り文字はスペース内のトークンを区切ります。別のキャラクターを使用することができます。次のコードはコンマを使用しています。コードをテストする場合は、Ctrl + zを押してループを終了することを忘れないでください。

輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
スキャナーscanObj= 新着スキャナー(( システム)。;
システムアウトprintln(('トークンの行を入力し、Enterキーを押します:')。;

scanObj。useDelimiter(('、')。;

その間((scanObj。hasNext(()。)。{{
システムアウトprintln((scanObj。(()。)。;
}

scanObj。選ぶ(()。;
}
}

コードをテストした場合、トークン内のスペースがトークン(出力)の一部として含まれていることに気付くでしょう。式、scanObj.useDelimiter(、);入力行が読み取られた後に入力されます。それがコンマ、区切り文字を作るものです。

プリミティブデータ型の読み取りと検証

nextBoolean()メソッド

次のコードでは、ユーザーは引用符なしでtrueまたはfalseを入力し、ユーザーが「はい」または「いいえ」などの他の入力をした場合はEnterキーを押すと、エラーメッセージが表示されます。

輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
システムアウト印刷((「あなたは24歳以上ですか? ')。;
スキャナーscanObj= 新着スキャナー(( システム)。;

ブール値bl=scanObj。nextBoolean(()。;
もしも ((bl== NS)。 {{
システムアウトprintln((「あなたは24歳以上です」)。;
}
そうしないと もしも ((bl== NS)。 {{
システムアウトprintln((「あなたは24歳未満です」)。;
}

scanObj。選ぶ(()。;
}
}

入力が正確にtrueまたはfalseでない限り、javaはエラーメッセージを発行するため、elseの代わりにelseifが使用されています。

printとprintlnのメソッドの違いは、printは現在の行の入力を予期しているのに対し、printlnは次の行の入力を予期していることです。

nextByte()メソッド

ASCII文字セットでは、文字は1バイトです。ただし、一部の東部文字セットでは、文字が複数のバイトで構成されている場合があります。 nextByteメソッドは、文字セットに関係なく、入力の次のバイトを読み取って検証します。この目的には、次のコードを使用できます。

輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
システムアウト印刷(('タイプ番号<128, press Enter: ')。;
スキャナーscanObj= 新着スキャナー(( システム)。;

バイトbt=scanObj。nextByte(()。;
システムアウトprintln((bt)。;

scanObj。選ぶ(()。;
}
}

このコードに127より大きい数字または英字を入力すると、エラーメッセージが表示されます。

nextInt()メソッド

入力としての次の整数トークンも検証して受け入れることができます。次のコードを使用できます。

輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
システムアウト印刷(('任意の整数を入力してください:')。;
スキャナーscanObj= 新着スキャナー(( システム)。;

int1つに=scanObj。nextInt(()。;
システムアウトprintln((1つに)。;

scanObj。選ぶ(()。;
}
}

先頭または末尾のスペースが削除されました。このコードでは、127より大きい値を含む任意の整数値が受け入れられます。これらのnextXXX()メソッドでは、検証が失敗すると、エラーメッセージが発行されます。

nextBigInteger()メソッド

ソフトウェアエンジニアは新しいことを思いつくのをやめないようです。大きな整数は、その値が整数の値よりもはるかに大きい整数です。ただし、Javaでは、整数と同じ方法で読み取ることができます。次のコードはこれを示しています。

輸入 java.util.Scanner;
輸入 java.math.BigInteger;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
システムアウトprintln(('大きな整数の整数を入力してください:')。;
スキャナーscanObj= 新着スキャナー(( システム)。;

BigInteger 1つに=scanObj。nextBigInteger(()。;
システムアウトprintln((1つに)。;

scanObj。選ぶ(()。;
}
}

importステートメントに注意してください。importjava.math.BigInteger;。また、大きな整数型は小文字のbではなく大文字のBで始まることに注意してください。

nextFloat()メソッド

入力としての次のfloatトークンも検証して受け入れることができます。次のコードを使用できます。

輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
システムアウト印刷(('任意のフロートを入力してください:')。;
スキャナーscanObj= 新着スキャナー(( システム)。;

浮く1つに=scanObj。nextFloat(()。;
システムアウトprintln((1つに)。;

scanObj。選ぶ(()。;
}
}

浮動小数点数の例は23.456です。先頭または末尾のスペースが削除されました。

nextDouble()

入力としての次のダブルトークンも検証して受け入れることができます。次のコードを使用できます。

輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
システムアウト印刷(('任意のダブルを入力してください:')。;
スキャナーscanObj= 新着スキャナー(( システム)。;

ダブル1つに=scanObj。nextDouble(()。;
システムアウトprintln((1つに)。;

scanObj。選ぶ(()。;
}
}

二重数の例は23.456です。ダブルナンバーは、エラーのマージンが少ないため、フロートとは異なります。先頭または末尾のスペースが削除されました。

nextLine()メソッド

nextLine()メソッドは文字列用です。文字列がEnterキーを押した後のキーボードからの入力行である場合、改行文字「 n」を含めることができます。次のコードを使用できます。

輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
システムアウトprintln(('次の行を入力してください\NS : ')。;
スキャナーscanObj= 新着スキャナー(( システム)。;

NS=scanObj。nextLine(()。;
システムアウトprintln((NS)。;

scanObj。選ぶ(()。;
}
}

文字列型は小文字のsではなく大文字のSで始まることに注意してください。

この記事では、nextLine()、hasNext()、およびnext()メソッドが以前に使用されています。スキャナーには他のメソッドと他のプリミティブデータメソッドがあります-後で参照してください。

変数への入力の割り当て

次のコードが示すように、入力を変数に割り当てることができます。

輸入 java.util.Scanner;

公衆 クラスクラス{{
公衆 静的 空所主要(( []args)。 {{
スキャナーscanObj= 新着スキャナー(( システム)。;

システムアウト印刷(('名前を入力: ')。;
名前=scanObj。nextLine(()。;

システムアウト印刷(('年齢を入力してください:')。;
int=scanObj。nextInt(()。;

システムアウト印刷(('給与を入力してください:')。;
ダブル給料=scanObj。nextDouble(()。;

システムアウトprintln(('名前: ' +名前+ '、 年: ' ++ '、 給料: ' +給料)。;

scanObj。選ぶ(()。;
}
}

結論

JavaのScannerは、java.utilパッケージのクラスです。このクラスは、文字列、キーボード、ファイル、またはネットワークソケットからの入力を読み取ることを目的としています。この記事では、主にキーボードからの入力の読み取りとターミナルウィンドウでの結果の表示に焦点を当てました。同様のアイデアを使用して、文字列、ファイル、またはネットワークチャネルから入力を読み取ることができます。

キーボード入力の行全体を読み取るには、nextLine()メソッドを使用します。文字列としての行は、hasNext()メソッドとnext()メソッド、およびwhileループを使用して、トークンに分割できます。分割のデフォルトの区切り文字はスペースですが、プログラマーは他の区切り文字を選択できます。必要に応じて、Ctrl + zを実行してwhileループを停止することを忘れないでください。先頭と末尾のスペースの削除は、この記事で取り上げていない他のスキームを使用して行うことができます。トークンの検証は、この記事で取り上げていない他のスキームを使用して行うこともできます。

プリミティブ値は、nextBoolean()、nextByte()、nextInt()などを使用して読み取ることができます。これらのnextXXX()メソッドは検証を行い、先頭と末尾のスペースも削除します。

Javaスキャナーにはさらに多くのメソッドがあります。ただし、この記事ではスキャナーの基本的な使用法について説明しました。トークンの選択は、実際には正規表現手法を使用して行われます。正規表現手法の使用については、しばらくの間議論されています。