Java での入力検証

Rashmi Patidar 2023年10月12日
Java での入力検証

検証は、特定の制約に対してユーザー入力またはデータベースからの値をチェックするプロセスです。検証は、プログラムが実際のビジネスロジックを実行し、ユーザーからの入力の問題を見つけるのにかかる時間を短縮するために適用されます。このプロセスによりパフォーマンスが向上するため、障害が発生した場合にさらにデバッグセッションが発生します。

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 Patidar
Rashmi Patidar avatar Rashmi Patidar avatar

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

関連記事 - Java Input