Java での入力検証
![Java での入力検証](/img/Java/feature-image---java-input-validation.webp)
検証は、特定の制約に対してユーザー入力またはデータベースからの値をチェックするプロセスです。検証は、プログラムが実際のビジネスロジックを実行し、ユーザーからの入力の問題を見つけるのにかかる時間を短縮するために適用されます。このプロセスによりパフォーマンスが向上するため、障害が発生した場合にさらにデバッグセッションが発生します。
Java コードでは、Scanner
クラスを使用してユーザー入力を取得します。入力コンテンツの検証に役立つ Scanner クラスのさまざまなメソッドがあります。
以下は、メソッドを説明するコードブロックです。
import java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter any text: ");
while (!scanner.hasNext("quit")) {
System.out.println(scanner.hasNextInt() ? "The Input text is int: " + scanner.nextInt()
: scanner.hasNextLong() ? "The Input text is long: " + scanner.nextLong()
: scanner.hasNextDouble() ? "The Input text is double: " + scanner.nextDouble()
: scanner.hasNextBoolean() ? "The Input text is boolean: " + scanner.nextBoolean()
: "The Input text is String: " + scanner.next());
}
}
}
上記のコードブロックでは、Scanner
クラスのインスタンスが作成されます。new キーワードを使用したコンストラクター呼び出しは、System.in
などの入力ストリームパラメーターを取ります。
これで、スキャナーインスタンスでの実際の作業が開始されます。まず、while 条件では、終了条件を与えるためにチェックが適用されます。この式は、Scanner クラスの hasNext
メソッドを使用します。このメソッドは、入力トークンと一致するパターンを取ります。そして、入力が quit
テキスト以外のものであるかどうかを確認します。スキャナーオブジェクトが閉じられると、hasNext
メソッドは IllegalStateException
をスローします。
これで、ブロックが開始されると、hasNextInt
メソッドを使用して入力が検証されます。入力したテキストが int
値の場合にのみ true を返します。入力テキストは、nextInt
メソッドを使用して int
としてコンソールからスキャンされ、コンソールに出力されます。nextInt()
メソッドは、テキストが整数正規表現と一致しない場合は InputMismatchException
をスローし、スキャナーインスタンスが閉じている場合は IllegalStateException
をスローします。
これで、このチェックブロック全体がネストされた三項ステートメントに書き込まれます。最初の条件が false と評価された場合、別のチェックが適用されます。hasNextDouble
メソッドはテキストを double として解釈し、一致した場合は true を返します。nextDouble()
メソッドは、標準出力から double 値を返し、コンソールに同じ値を出力します。それ以外の場合は、次のチェックに移動します。nextDouble()
メソッドは、コンソールからの次のトークンが Float Regex と一致しない場合は InputMismatchException
をスローし、スキャナーインスタンスが閉じられると IllegalStateException
をスローします。
もう 1つのチェックは、hasNextBoolean
メソッドを使用することです。このメソッドは、true または false の boolean
値をチェックします。戻り値がブール値の true の場合、nextBoolean()
を使用してコンソール入力を取得し、それを出力画面に出力します。それ以外の場合は、三項演算子 else セクションに進みます。nextBoolean
メソッドは、次のトークンがブール値を検出しない場合は InputMismatchException
をスローし、スキャナーインスタンスが閉じられる場合は IllegalStateException
をスローします。
同じパターンに従って、入力は next
メソッドを使用して検証されます。このメソッドは、while 入力チェックセクションの最後の条件になります。このメソッドは、コンソールから先行テキスト全体を検索して返します。この関数は、入力がスキャンされるのを待っている間、コンソール出力をブロックする場合があります。このメソッドは常に文字列値を返します。評価では、特殊文字も文字列として扱われ、出力に出力されます。他のメソッドと同じ例外がスローされます。スキャナーが閉じている場合は IllegalStateException
と言い、使用可能なトークンがなくなった場合は NoSuchElementException
と言います。
以下は、上記の検証コードの出力ブロックです。
Enter any text:
--
The input text is String: --
67
The input text is int: 67
1234567890000000
The input text is long: 1234567890000000
true
The input text is boolean: true
FALSE
The input text is boolean: false
90.08939782639
The input text is double: 90.08939782639
hi
The input text is String: hi
quit
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn