Eingabevalidierung in Java

Rashmi Patidar 12 Oktober 2023
Eingabevalidierung in Java

Die Validierung ist der Prozess, bei dem Benutzereingaben oder die Werte aus der Datenbank anhand bestimmter Einschränkungen überprüft werden. Die Validierung wird angewendet, um die Zeit zu reduzieren, die das Programm benötigt, um die eigentliche Geschäftslogik auszuführen und dann Probleme bei der Eingabe des Benutzers zu finden. Der Prozess erhöht die Performance und führt im Fehlerfall zu weiteren Debug-Sitzungen.

Im Java-Code nehmen wir Benutzereingaben mit der Klasse Scanner entgegen. Es gibt verschiedene Methoden der Scanner-Klasse, die bei der Validierung von Eingabeinhalten helfen.

Unten ist der Codeblock, der die Methoden erklärt.

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());
    }
  }
}

Im obigen Codeblock wird eine Instanz der Klasse Scanner erstellt. Der Konstruktoraufruf mit einem new-Schlüsselwort nimmt einen Input-Stream-Parameter an, beispielsweise System.in.

Nun beginnt die eigentliche Arbeit an der Scanner-Instanz. Zuerst wird in der while-Bedingung eine Prüfung angewendet, um eine Abbruchbedingung anzugeben. Der Ausdruck verwendet die Methode hasNext der Scanner-Klasse. Die Methode benötigt ein Muster, das mit dem Eingabetoken übereinstimmt. Und prüft, ob es sich bei der Eingabe um etwas anderes als den quit-Text handelt. Die Methode hasNext wirft IllegalStateException, wenn das Scanner-Objekt geschlossen wird.

Wenn nun der Block initiiert wird, wird die Eingabe mit der Methode hasNextInt validiert. Es gibt nur true zurück, wenn der eingegebene Text ein int-Wert ist. Der Eingabetext wird von der Konsole als int mit der Methode nextInt gescannt und über die Konsole gedruckt. Die Methode nextInt() wirft InputMismatchException, wenn der Text nicht mit dem Integer Regex übereinstimmt, IllegalStateException, wenn die Scanner-Instanz geschlossen wird.

Nun wird der gesamte Prüfblock in verschachtelte ternäre Anweisungen geschrieben. Wenn die erste Bedingung als falsch ausgewertet wird, wird eine weitere Prüfung durchgeführt. Die Methode hasNextDouble interpretiert den Text als double und gibt bei Übereinstimmung true zurück. Die Methode nextDouble() gibt einen Double-Wert von der Standardausgabe zurück und gibt denselben in der Konsole aus, ansonsten bewegt er sich zur nächsten Prüfung. Die Methode nextDouble() wirft InputMismatchException, wenn das nächste Token von der Konsole nicht mit dem Float-Regex übereinstimmt, IllegalStateException, wenn die Scanner-Instanz geschlossen wird.

Eine weitere Prüfung erfolgt mit der Methode hasNextBoolean. Diese Methode prüft auf den booleschen Wert, wahr oder falsch. Wenn der zurückgegebene Wert boolean true ist, wird die Verwendung von nextBoolean() verwendet, um die Konsoleneingabe zu übernehmen und dieselbe auf dem Ausgabebildschirm auszugeben. Andernfalls fährt es mit dem Abschnitt ternäre Operatoren else fort. Die Methode nextBoolean wirft InputMismatchException, wenn das nächste Token keinen booleschen Wert findet, IllegalStateException, wenn die Scannerinstanz geschlossen wird.

Nach dem gleichen Muster wird die Eingabe mit der Methode next validiert. Die Methode wird zur letzten Bedingung des Abschnitts zur Prüfung der Eingabe von while. Die Methode sucht den gesamten Ahead-Text von der Konsole und gibt ihn zurück. Die Funktion kann die Konsolenausgabe blockieren, während sie auf die Eingabe zum Scannen wartet. Die Methode gibt immer einen String-Wert zurück. Die Auswertung behandelt Sonderzeichen auch als Strings und druckt in der Ausgabe. Dieselbe Ausnahme wird wie bei anderen Methoden ausgelöst. Sagen Sie IllegalStateException, wenn der Scanner geschlossen ist, oder NoSuchElementException, wenn keine Token mehr verfügbar sind.

Unten ist der Ausgabeblock für den obigen Validierungscode.

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 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

Verwandter Artikel - Java Input