Wie man ungültige Benutzereingaben in einem Java - Programm behandelt

JavaJavaBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Die Behandlung ungültiger Benutzereingaben ist ein entscheidender Aspekt der Java - Programmierung, der sicherstellt, dass Ihre Anwendungen robust und zuverlässig bleiben. Wenn Benutzer mit Ihren Programmen interagieren, können sie unerwartete oder falsche Daten eingeben, die dazu führen könnten, dass Ihre Anwendung abstürzt, wenn diese nicht richtig behandelt werden.

In diesem Lab (Übungsbeispiel) werden Sie lernen, wie Sie ungültige Benutzereingaben in Java - Anwendungen effektiv behandeln können. Sie werden verschiedene Techniken untersuchen, von einfachen Fehlerprüfungen bis hin zu fortgeschrittenen Validierungsmethoden. Am Ende dieses Labs werden Sie in der Lage sein, Java - Programme zu schreiben, die Benutzerfehler elegant behandeln und angemessene Rückmeldung geben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/StringManipulationGroup -.-> java/regex("RegEx") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/user_input("User Input") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/encapsulation("Encapsulation") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") subgraph Lab Skills java/if_else -.-> lab-414054{{"Wie man ungültige Benutzereingaben in einem Java - Programm behandelt"}} java/regex -.-> lab-414054{{"Wie man ungültige Benutzereingaben in einem Java - Programm behandelt"}} java/user_input -.-> lab-414054{{"Wie man ungültige Benutzereingaben in einem Java - Programm behandelt"}} java/encapsulation -.-> lab-414054{{"Wie man ungültige Benutzereingaben in einem Java - Programm behandelt"}} java/exceptions -.-> lab-414054{{"Wie man ungültige Benutzereingaben in einem Java - Programm behandelt"}} end

Erstellen eines einfachen Java - Programms mit Benutzereingabe

In diesem ersten Schritt werden wir ein einfaches Java - Programm erstellen, das Benutzereingaben sammelt. Dies wird als Grundlage für das Lernen von Eingabevalidierungstechniken dienen.

Grundlagen der Benutzereingabe in Java

Java bietet mehrere Möglichkeiten, Eingaben von Benutzern zu sammeln. Für Konsolenanwendungen wird üblicherweise die Scanner - Klasse aus dem java.util - Paket verwendet. Diese Klasse bietet Methoden, um verschiedene Eingabetypen wie Ganzzahlen, Fließkommazahlen und Zeichenketten zu lesen.

Erstellen des Eingabeprogramms

Beginnen wir damit, ein einfaches Java - Programm zu erstellen, das nach dem Alter eines Benutzers fragt und es wieder ausgibt.

  1. Öffnen Sie zunächst die WebIDE und navigieren Sie zum Projektverzeichnis:

  2. Erstellen Sie eine neue Datei, indem Sie auf das Symbol "Neue Datei" im Dateiexplorer der WebIDE klicken. Benennen Sie die Datei UserInputDemo.java

  3. Fügen Sie den folgenden Code zur Datei hinzu:

import java.util.Scanner;

public class UserInputDemo {
    public static void main(String[] args) {
        // Create a Scanner object to read input
        Scanner scanner = new Scanner(System.in);

        // Prompt the user for their age
        System.out.print("Please enter your age: ");

        // Read the input
        int age = scanner.nextInt();

        // Display the entered age
        System.out.println("You entered: " + age);

        // Close the scanner
        scanner.close();
    }
}
  1. Speichern Sie die Datei, indem Sie Strg + S drücken oder im Menü "Datei" > "Speichern" auswählen.

  2. Öffnen Sie ein Terminal in der WebIDE, indem Sie im oberen Menü auf "Terminal" > "Neues Terminal" klicken.

Input Demo
  1. Kompilieren Sie das Java - Programm, indem Sie den folgenden Befehl ausführen:
javac UserInputDemo.java
  1. Führen Sie das Programm mit folgendem Befehl aus:
java UserInputDemo
  1. Geben Sie bei der Aufforderung eine Zahl ein, beispielsweise 25. Sie sollten die folgende Ausgabe sehen:
Please enter your age: 25
You entered: 25

Was passiert bei ungültiger Eingabe?

Lassen Sie uns nun sehen, was passiert, wenn wir eine ungültige Eingabe machen. Führen Sie das Programm erneut aus:

java UserInputDemo

Geben Sie diesmal einen nicht numerischen Wert ein, wie beispielsweise twenty - five. Sie werden eine Fehlermeldung ähnlich der folgenden sehen:

Please enter your age: twenty-five
Exception in thread "main" java.util.InputMismatchException
 at java.base/java.util.Scanner.throwFor(Scanner.java:943)
 at java.base/java.util.Scanner.next(Scanner.java:1598)
 at java.base/java.util.Scanner.nextInt(Scanner.java:2263)
 at java.base/java.util.Scanner.nextInt(Scanner.java:2217)
 at UserInputDemo.main(UserInputDemo.java:12)

Diese InputMismatchException tritt auf, weil das Programm eine numerische Eingabe (eine Ganzzahl) erwartet hat, aber stattdessen Text erhalten hat. Das Programm stürzt ab, anstatt diese Situation elegant zu behandeln. In den nächsten Schritten werden wir lernen, wie man solche ungültigen Eingaben richtig behandelt.

Behandlung von Ausnahmen bei ungültiger Eingabe

In diesem Schritt werden wir unser Programm ändern, um ungültige Eingaben mithilfe des Java - Ausnahmebehandlungsmechanismus zu verarbeiten.

Grundlagen der Java - Ausnahmen

Ausnahmen in Java sind Ereignisse, die den normalen Ablauf der Programmausführung unterbrechen. Wenn ein Benutzer eine ungültige Eingabe macht, wirft das Java - Laufzeitsystem eine Ausnahme, um anzuzeigen, dass etwas schiefgelaufen ist. Das Programm kann diese Ausnahmen abfangen und sie angemessen behandeln, anstatt abzustürzen.

Die grundlegende Struktur für die Ausnahmebehandlung in Java ist der try - catch - Block:

try {
    // Code that might throw an exception
} catch (ExceptionType e) {
    // Code to handle the exception
}

Anpassen unseres Programms zur Ausnahmebehandlung

Lassen Sie uns unser Programm aktualisieren, um die InputMismatchException zu behandeln, die auftritt, wenn der Benutzer eine nicht numerische Eingabe macht:

  1. Öffnen Sie die Datei UserInputDemo.java in der WebIDE.

  2. Ändern Sie den Code, um die Ausnahmebehandlung einzubeziehen:

import java.util.Scanner;
import java.util.InputMismatchException;

public class UserInputDemo {
    public static void main(String[] args) {
        // Create a Scanner object to read input
        Scanner scanner = new Scanner(System.in);

        try {
            // Prompt the user for their age
            System.out.print("Please enter your age: ");

            // Read the input
            int age = scanner.nextInt();

            // Display the entered age
            System.out.println("You entered: " + age);
        } catch (InputMismatchException e) {
            // Handle the exception if non-numeric input is provided
            System.out.println("Error: Please enter a valid numeric age.");
        } finally {
            // Close the scanner in the finally block to ensure it always gets closed
            scanner.close();
        }
    }
}
  1. Speichern Sie die Datei, indem Sie Strg + S drücken.

  2. Kompilieren Sie das aktualisierte Programm:

javac UserInputDemo.java
  1. Führen Sie das Programm aus:
java UserInputDemo
  1. Versuchen Sie, einen nicht numerischen Wert wie twenty - five einzugeben. Anstatt abzustürzen, zeigt das Programm jetzt an:
Please enter your age: twenty-five
Error: Please enter a valid numeric age.

Verbesserung der Ausnahmebehandlung

Unsere aktuelle Implementierung behandelt die Ausnahme, bricht aber sofort ab. Lassen Sie uns es verbessern, indem wir dem Benutzer mehrere Versuche geben, ein gültiges Alter einzugeben:

  1. Öffnen Sie die Datei UserInputDemo.java in der WebIDE.

  2. Ändern Sie den Code, um mehrere Versuche zu ermöglichen:

import java.util.Scanner;
import java.util.InputMismatchException;

public class UserInputDemo {
    public static void main(String[] args) {
        // Create a Scanner object to read input
        Scanner scanner = new Scanner(System.in);

        boolean validInput = false;
        int age = 0;

        // Keep trying until valid input is received
        while (!validInput) {
            try {
                // Prompt the user for their age
                System.out.print("Please enter your age: ");

                // Read the input
                age = scanner.nextInt();

                // If we get here, the input was valid
                validInput = true;
            } catch (InputMismatchException e) {
                // Handle the exception if non-numeric input is provided
                System.out.println("Error: Please enter a valid numeric age.");

                // Clear the invalid input from the scanner
                scanner.nextLine();
            }
        }

        // Display the entered age
        System.out.println("You entered: " + age);

        // Close the scanner
        scanner.close();
    }
}
  1. Speichern Sie die Datei.

  2. Kompilieren und führen Sie das Programm erneut aus:

javac UserInputDemo.java
java UserInputDemo
  1. Versuchen Sie zunächst eine ungültige Eingabe und dann eine gültige:
Please enter your age: twenty-five
Error: Please enter a valid numeric age.
Please enter your age: 25
You entered: 25

Nun gibt unser Programm dem Benutzer mehrere Chancen, eine gültige Eingabe zu machen. Dies ist eine erhebliche Verbesserung bei der fehlerfreien Behandlung von ungültigen Eingaben.

Implementierung der Eingabevalidierung mit bedingten Anweisungen

Neben der Ausnahmebehandlung können wir bedingte Anweisungen verwenden, um Benutzereingaben zu validieren. Dieser Ansatz ermöglicht es uns, benutzerdefinierte Validierungsregeln zu implementieren, bevor die Eingabe verarbeitet wird.

Grundlagen der Eingabevalidierung

Die Eingabevalidierung ist der Prozess, bei dem die Benutzereingabe überprüft wird, um sicherzustellen, dass sie bestimmten Kriterien entspricht, bevor sie verarbeitet wird. Beispielsweise möchten wir möglicherweise sicherstellen, dass ein Alterswert nicht nur eine Zahl ist, sondern auch in einem vernünftigen Bereich liegt.

Hinzufügen einer Bereichsvalidierung zu unserem Programm

Lassen Sie uns unser Programm erweitern, um zu validieren, dass der Benutzer ein Alter zwischen 0 und 120 eingibt:

  1. Öffnen Sie die Datei UserInputDemo.java in der WebIDE.

  2. Ändern Sie den Code, um die Bereichsvalidierung einzubeziehen:

import java.util.Scanner;
import java.util.InputMismatchException;

public class UserInputDemo {
    public static void main(String[] args) {
        // Create a Scanner object to read input
        Scanner scanner = new Scanner(System.in);

        boolean validInput = false;
        int age = 0;

        // Keep trying until valid input is received
        while (!validInput) {
            try {
                // Prompt the user for their age
                System.out.print("Please enter your age (0-120): ");

                // Read the input
                age = scanner.nextInt();

                // Check if the age is within a valid range
                if (age < 0 || age > 120) {
                    System.out.println("Error: Age must be between 0 and 120.");
                } else {
                    // If we get here, the input was valid
                    validInput = true;
                }
            } catch (InputMismatchException e) {
                // Handle the exception if non-numeric input is provided
                System.out.println("Error: Please enter a valid numeric age.");

                // Clear the invalid input from the scanner
                scanner.nextLine();
            }
        }

        // Display the entered age
        System.out.println("You entered: " + age);

        // Close the scanner
        scanner.close();
    }
}
  1. Speichern Sie die Datei, indem Sie Strg + S drücken.

  2. Kompilieren Sie das Programm:

javac UserInputDemo.java
  1. Führen Sie das Programm aus:
java UserInputDemo
  1. Testen Sie das Programm mit verschiedenen Eingaben:

    • Geben Sie ein gültiges Alter ein (z. B. 25):
    Please enter your age (0-120): 25
    You entered: 25
    • Geben Sie ein negatives Alter ein:
    Please enter your age (0-120): -5
    Error: Age must be between 0 and 120.
    Please enter your age (0-120):
    • Geben Sie ein Alter über 120 ein:
    Please enter your age (0-120): 150
    Error: Age must be between 0 and 120.
    Please enter your age (0-120):
    • Geben Sie einen nicht numerischen Wert ein:
    Please enter your age (0-120): twenty-five
    Error: Please enter a valid numeric age.
    Please enter your age (0-120):

Erstellen eines komplexeren Beispiels: Benutzerregistrierungsformular

Lassen Sie uns ein umfassenderes Beispiel erstellen, das mehrere Felder eines Benutzerregistrierungsformulars validiert:

  1. Erstellen Sie eine neue Datei mit dem Namen UserRegistration.java in der WebIDE.

  2. Fügen Sie den folgenden Code zur Datei hinzu:

import java.util.Scanner;

public class UserRegistration {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // Get and validate username
        String username = getValidUsername(scanner);

        // Get and validate age
        int age = getValidAge(scanner);

        // Get and validate email
        String email = getValidEmail(scanner);

        // Display the registration information
        System.out.println("\nRegistration Successful!");
        System.out.println("Username: " + username);
        System.out.println("Age: " + age);
        System.out.println("Email: " + email);

        scanner.close();
    }

    private static String getValidUsername(Scanner scanner) {
        String username;
        boolean validUsername = false;

        do {
            System.out.print("Enter username (3-15 characters): ");
            username = scanner.nextLine().trim();

            if (username.length() < 3 || username.length() > 15) {
                System.out.println("Error: Username must be between 3 and 15 characters.");
            } else {
                validUsername = true;
            }
        } while (!validUsername);

        return username;
    }

    private static int getValidAge(Scanner scanner) {
        int age = 0;
        boolean validAge = false;

        while (!validAge) {
            try {
                System.out.print("Enter your age (0-120): ");
                age = Integer.parseInt(scanner.nextLine());

                if (age < 0 || age > 120) {
                    System.out.println("Error: Age must be between 0 and 120.");
                } else {
                    validAge = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Error: Please enter a valid numeric age.");
            }
        }

        return age;
    }

    private static String getValidEmail(Scanner scanner) {
        String email;
        boolean validEmail = false;

        do {
            System.out.print("Enter your email: ");
            email = scanner.nextLine().trim();

            // Simple email validation: must contain @ and a period after @
            if (!email.contains("@") || email.indexOf('.', email.indexOf('@')) == -1) {
                System.out.println("Error: Please enter a valid email address.");
            } else {
                validEmail = true;
            }
        } while (!validEmail);

        return email;
    }
}
  1. Speichern Sie die Datei, indem Sie Strg + S drücken.

  2. Kompilieren Sie das Programm:

javac UserRegistration.java
  1. Führen Sie das Programm aus:
java UserRegistration
  1. Befolgen Sie die Anweisungen, um einen Benutzernamen, ein Alter und eine E - Mail - Adresse einzugeben. Das Programm wird jede Eingabe validieren und erst fortfahren, wenn gültige Daten eingegeben wurden.

Beispiel für eine gültige Eingabereihenfolge:

Enter username (3-15 characters): johnsmith
Enter your age (0-120): 30
Enter your email: john.smith@example.com

Registration Successful!
Username: johnsmith
Age: 30
Email: john.smith@example.com

Dieses umfassendere Beispiel zeigt, wie verschiedene Arten von Benutzereingaben sowohl mit Ausnahmebehandlung als auch mit bedingter Validierung validiert werden können.

Verwendung von regulären Ausdrücken zur Eingabevalidierung

Reguläre Ausdrücke (englisch: regular expressions, regex) bieten eine leistungsstarke Möglichkeit, komplexe Eingabemuster wie E-Mail-Adressen, Telefonnummern und Passwörter zu validieren. In diesem Schritt werden wir lernen, wie man in Java reguläre Ausdrücke verwendet, um fortgeschrittene Eingabevalidierungen durchzuführen.

Grundlagen der regulären Ausdrücke

Ein regulärer Ausdruck ist eine Zeichenfolge, die ein Suchmuster definiert. Diese Muster können verwendet werden, um zu überprüfen, ob eine Zeichenkette einem bestimmten Format entspricht. Java bietet das Paket java.util.regex, das die Klassen Pattern und Matcher für die Arbeit mit regulären Ausdrücken enthält.

Hinzufügen einer Regex-Validierung zu unserem UserRegistration-Programm

Lassen Sie uns unser UserRegistration-Programm erweitern, um reguläre Ausdrücke für eine robusterere Eingabevalidierung zu verwenden:

  1. Öffnen Sie die Datei UserRegistration.java in der WebIDE.

  2. Ändern Sie die Datei, um die Regex-Validierung einzubeziehen:

import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class UserRegistration {
    // Regular expression patterns
    private static final String USERNAME_PATTERN = "^[a-zA-Z0-9_]{3,15}$";
    private static final String EMAIL_PATTERN = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
    private static final String PHONE_PATTERN = "^\\d{3}-\\d{3}-\\d{4}$";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // Get and validate username
        String username = getValidUsername(scanner);

        // Get and validate age
        int age = getValidAge(scanner);

        // Get and validate email
        String email = getValidEmail(scanner);

        // Get and validate phone number
        String phone = getValidPhone(scanner);

        // Display the registration information
        System.out.println("\nRegistration Successful!");
        System.out.println("Username: " + username);
        System.out.println("Age: " + age);
        System.out.println("Email: " + email);
        System.out.println("Phone: " + phone);

        scanner.close();
    }

    private static String getValidUsername(Scanner scanner) {
        String username;
        boolean validUsername = false;
        Pattern pattern = Pattern.compile(USERNAME_PATTERN);

        do {
            System.out.print("Enter username (3-15 alphanumeric characters or underscore): ");
            username = scanner.nextLine().trim();

            Matcher matcher = pattern.matcher(username);
            if (!matcher.matches()) {
                System.out.println("Error: Username must be 3-15 characters long and contain only letters, numbers, or underscores.");
            } else {
                validUsername = true;
            }
        } while (!validUsername);

        return username;
    }

    private static int getValidAge(Scanner scanner) {
        int age = 0;
        boolean validAge = false;

        while (!validAge) {
            try {
                System.out.print("Enter your age (0-120): ");
                age = Integer.parseInt(scanner.nextLine());

                if (age < 0 || age > 120) {
                    System.out.println("Error: Age must be between 0 and 120.");
                } else {
                    validAge = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Error: Please enter a valid numeric age.");
            }
        }

        return age;
    }

    private static String getValidEmail(Scanner scanner) {
        String email;
        boolean validEmail = false;
        Pattern pattern = Pattern.compile(EMAIL_PATTERN);

        do {
            System.out.print("Enter your email: ");
            email = scanner.nextLine().trim();

            Matcher matcher = pattern.matcher(email);
            if (!matcher.matches()) {
                System.out.println("Error: Please enter a valid email address.");
            } else {
                validEmail = true;
            }
        } while (!validEmail);

        return email;
    }

    private static String getValidPhone(Scanner scanner) {
        String phone;
        boolean validPhone = false;
        Pattern pattern = Pattern.compile(PHONE_PATTERN);

        do {
            System.out.print("Enter your phone number (format: 123-456-7890): ");
            phone = scanner.nextLine().trim();

            Matcher matcher = pattern.matcher(phone);
            if (!matcher.matches()) {
                System.out.println("Error: Please enter a valid phone number in the format 123-456-7890.");
            } else {
                validPhone = true;
            }
        } while (!validPhone);

        return phone;
    }
}
  1. Speichern Sie die Datei, indem Sie Strg + S drücken.

  2. Kompilieren Sie das Programm:

javac UserRegistration.java
  1. Führen Sie das Programm aus:
java UserRegistration
  1. Testen Sie das Programm mit verschiedenen Eingaben:

    • Versuchen Sie, einen ungültigen Benutzernamen einzugeben (zu kurz, Sonderzeichen enthalten):
    Enter username (3-15 alphanumeric characters or underscore): a$
    Error: Username must be 3-15 characters long and contain only letters, numbers, or underscores.
    Enter username (3-15 alphanumeric characters or underscore):
    • Versuchen Sie, eine ungültige E-Mail-Adresse einzugeben (fehlendes @ oder fehlende Domain):
    Enter username (3-15 alphanumeric characters or underscore): johndoe
    Enter your age (0-120): 25
    Enter your email: johndoe.com
    Error: Please enter a valid email address.
    Enter your email:
    • Versuchen Sie, eine ungültige Telefonnummer einzugeben (falsches Format):
    Enter username (3-15 alphanumeric characters or underscore): johndoe
    Enter your age (0-120): 25
    Enter your email: john.doe@example.com
    Enter your phone number (format: 123-456-7890): 1234567890
    Error: Please enter a valid phone number in the format 123-456-7890.
    Enter your phone number (format: 123-456-7890):
    • Geben Sie alle gültigen Eingaben ein:
    Enter username (3-15 alphanumeric characters or underscore): johndoe
    Enter your age (0-120): 25
    Enter your email: john.doe@example.com
    Enter your phone number (format: 123-456-7890): 123-456-7890
    
    Registration Successful!
    Username: johndoe
    Age: 25
    Email: john.doe@example.com
    Phone: 123-456-7890

Analyse der regulären Ausdrucksmuster

Lassen Sie uns die in unserem Programm verwendeten regulären Ausdrucksmuster untersuchen:

  1. USERNAME_PATTERN: ^[a-zA-Z0-9_]{3,15}$

    • ^ und $ stellen sicher, dass das Muster die gesamte Zeichenkette übereinstimmt
    • [a-zA-Z0-9_] passt auf jeden Buchstaben (groß oder klein), jede Zahl oder Unterstrich
    • {3,15} gibt an, dass die Länge zwischen 3 und 15 Zeichen liegen sollte
  2. EMAIL_PATTERN: ^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$

    • Dieses Muster validiert E-Mail-Adressen gemäß gängigen Regeln
    • Es stellt sicher, dass die E-Mail einen Benutzernamen, ein @-Symbol und eine Domain hat
  3. PHONE_PATTERN: ^\\d{3}-\\d{3}-\\d{4}$

    • \\d passt auf jede Ziffer (0 - 9)
    • {3} und {4} geben die Anzahl der Ziffern an
    • - passt auf das eigentliche Bindestrichzeichen

Reguläre Ausdrücke sind ein leistungsstarkes Werkzeug zur Eingabevalidierung, können aber komplex sein. Je vertrauter Sie mit ihnen werden, desto ausgefeiltere Validierungsmuster können Sie für Ihre Anwendungen erstellen.

Erstellen eines vollständigen Formularvalidierungssystems

In diesem letzten Schritt werden wir ein vollständiges Formularvalidierungssystem erstellen, das alle Techniken integriert, die wir gelernt haben. Wir werden ein modulareres und wiederverwendbares Validierungssystem erstellen, das einfach für verschiedene Anwendungen erweitert werden kann.

Erstellen einer Validierungs-Hilfsklasse

Beginnen wir damit, eine Hilfsklasse zu erstellen, die unsere Validierungsmethoden kapselt:

  1. Erstellen Sie eine neue Datei mit dem Namen InputValidator.java in der WebIDE.

  2. Fügen Sie den folgenden Code zur Datei hinzu:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * Utility class for validating user input
 */
public class InputValidator {
    // Regular expression patterns
    private static final String USERNAME_PATTERN = "^[a-zA-Z0-9_]{3,15}$";
    private static final String EMAIL_PATTERN = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
    private static final String PHONE_PATTERN = "^\\d{3}-\\d{3}-\\d{4}$";
    private static final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,}$";

    /**
     * Validates a username
     * @param username The username to validate
     * @return true if the username is valid, false otherwise
     */
    public static boolean isValidUsername(String username) {
        if (username == null) {
            return false;
        }
        Pattern pattern = Pattern.compile(USERNAME_PATTERN);
        Matcher matcher = pattern.matcher(username);
        return matcher.matches();
    }

    /**
     * Validates an email address
     * @param email The email to validate
     * @return true if the email is valid, false otherwise
     */
    public static boolean isValidEmail(String email) {
        if (email == null) {
            return false;
        }
        Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }

    /**
     * Validates a phone number
     * @param phone The phone number to validate
     * @return true if the phone number is valid, false otherwise
     */
    public static boolean isValidPhone(String phone) {
        if (phone == null) {
            return false;
        }
        Pattern pattern = Pattern.compile(PHONE_PATTERN);
        Matcher matcher = pattern.matcher(phone);
        return matcher.matches();
    }

    /**
     * Validates an age
     * @param age The age to validate
     * @return true if the age is valid, false otherwise
     */
    public static boolean isValidAge(int age) {
        return age >= 0 && age <= 120;
    }

    /**
     * Validates a password
     * @param password The password to validate
     * @return true if the password is valid, false otherwise
     */
    public static boolean isValidPassword(String password) {
        if (password == null) {
            return false;
        }
        Pattern pattern = Pattern.compile(PASSWORD_PATTERN);
        Matcher matcher = pattern.matcher(password);
        return matcher.matches();
    }

    /**
     * Gets the error message for an invalid username
     * @return The error message
     */
    public static String getUsernameErrorMessage() {
        return "Username must be 3-15 characters long and contain only letters, numbers, or underscores.";
    }

    /**
     * Gets the error message for an invalid email
     * @return The error message
     */
    public static String getEmailErrorMessage() {
        return "Please enter a valid email address.";
    }

    /**
     * Gets the error message for an invalid phone number
     * @return The error message
     */
    public static String getPhoneErrorMessage() {
        return "Please enter a valid phone number in the format 123-456-7890.";
    }

    /**
     * Gets the error message for an invalid age
     * @return The error message
     */
    public static String getAgeErrorMessage() {
        return "Age must be between 0 and 120.";
    }

    /**
     * Gets the error message for an invalid password
     * @return The error message
     */
    public static String getPasswordErrorMessage() {
        return "Password must be at least 8 characters long and contain at least one digit, one lowercase letter, one uppercase letter, one special character, and no whitespace.";
    }
}
  1. Speichern Sie die Datei, indem Sie Strg + S drücken.

Erstellen eines vollständigen Registrierungsformulars

Jetzt erstellen wir eine neue Version unseres Registrierungsformulars, die die InputValidator-Klasse verwendet:

  1. Erstellen Sie eine neue Datei mit dem Namen CompleteRegistrationForm.java in der WebIDE.

  2. Fügen Sie den folgenden Code zur Datei hinzu:

import java.util.Scanner;

public class CompleteRegistrationForm {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // Collect and validate user information
        String username = getValidInput(scanner, "Username", InputValidator::isValidUsername, InputValidator.getUsernameErrorMessage());
        int age = getValidAge(scanner);
        String email = getValidInput(scanner, "Email", InputValidator::isValidEmail, InputValidator.getEmailErrorMessage());
        String phone = getValidInput(scanner, "Phone number (format: 123-456-7890)", InputValidator::isValidPhone, InputValidator.getPhoneErrorMessage());
        String password = getValidInput(scanner, "Password", InputValidator::isValidPassword, InputValidator.getPasswordErrorMessage());

        // Display the registration information
        System.out.println("\nRegistration Successful!");
        System.out.println("Username: " + username);
        System.out.println("Age: " + age);
        System.out.println("Email: " + email);
        System.out.println("Phone: " + phone);
        System.out.println("Password: " + maskPassword(password));

        scanner.close();
    }

    /**
     * Generic method to get valid input from the user
     * @param scanner The scanner to read input
     * @param fieldName The name of the field being validated
     * @param validator The validation function
     * @param errorMessage The error message to display
     * @return The validated input
     */
    private static String getValidInput(Scanner scanner, String fieldName, java.util.function.Predicate<String> validator, String errorMessage) {
        String input;
        boolean validInput = false;

        do {
            System.out.print("Enter your " + fieldName + ": ");
            input = scanner.nextLine().trim();

            if (!validator.test(input)) {
                System.out.println("Error: " + errorMessage);
            } else {
                validInput = true;
            }
        } while (!validInput);

        return input;
    }

    /**
     * Gets a valid age from the user
     * @param scanner The scanner to read input
     * @return The validated age
     */
    private static int getValidAge(Scanner scanner) {
        int age = 0;
        boolean validAge = false;

        while (!validAge) {
            try {
                System.out.print("Enter your age (0-120): ");
                age = Integer.parseInt(scanner.nextLine());

                if (!InputValidator.isValidAge(age)) {
                    System.out.println("Error: " + InputValidator.getAgeErrorMessage());
                } else {
                    validAge = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Error: Please enter a valid numeric age.");
            }
        }

        return age;
    }

    /**
     * Masks a password for display
     * @param password The password to mask
     * @return The masked password
     */
    private static String maskPassword(String password) {
        if (password == null || password.isEmpty()) {
            return "";
        }
        return "*".repeat(password.length());
    }
}
  1. Speichern Sie die Datei, indem Sie Strg + S drücken.

  2. Kompilieren Sie beide Java-Dateien:

javac InputValidator.java
javac CompleteRegistrationForm.java
  1. Führen Sie das Registrierungsformular-Programm aus:
java CompleteRegistrationForm
  1. Befolgen Sie die Anweisungen, um gültige Informationen für jedes Feld einzugeben. Das Programm wird jede Eingabe gemäß den in der InputValidator-Klasse definierten Regeln validieren.

Beispielinteraktion:

Enter your Username: john_doe
Enter your age (0-120): 35
Enter your Email: john.doe@example.com
Enter your Phone number (format: 123-456-7890): 123-456-7890
Enter your Password: weakpw
Error: Password must be at least 8 characters long and contain at least one digit, one lowercase letter, one uppercase letter, one special character, and no whitespace.
Enter your Password: P@ssw0rd123

Registration Successful!
Username: john_doe
Age: 35
Email: john.doe@example.com
Phone: 123-456-7890
Password: ***********

Vorteile dieses Ansatzes

Der Ansatz, den wir in diesem letzten Beispiel verfolgt haben, bietet mehrere Vorteile:

  1. Modularität: Die Validierungslogik ist in einer wiederverwendbaren Hilfsklasse getrennt.
  2. Erweiterbarkeit: Neue Validierungsregeln können einfach zur InputValidator-Klasse hinzugefügt werden.
  3. Wartbarkeit: Die Fehlermeldungen sind zentralisiert und können einfach aktualisiert werden.
  4. Code-Wiederverwendung: Die getValidInput-Methode ist generisch und kann für verschiedene Eingabetypen verwendet werden.
  5. Sicherheit: Das Passwort wird beim Anzeigen für den Benutzer maskiert.

Dieses Design folgt guten Software-Engineering-Prinzipien und erleichtert es, das Validierungssystem für verschiedene Anwendungen anzupassen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie ungültige Benutzereingaben in Java-Programmen effektiv behandeln können. Sie sind von einem grundlegenden Verständnis der Eingabebehandlung zu der Implementierung eines umfassenden Validierungssystems vorgeschritten. Hier ist eine Zusammenfassung dessen, was Sie erreicht haben:

  1. Erstellt ein einfaches Java-Programm, das Benutzereingaben mit der Scanner-Klasse sammelt
  2. Implementiert die Ausnahmebehandlung (Exception Handling), um ungültige Eingaben gracefully zu verwalten
  3. Hinzugefügt bedingte Validierung, um sicherzustellen, dass die Eingabe bestimmten Kriterien entspricht
  4. Reguläre Ausdrücke (Regular Expressions) für eine fortgeschrittene, musterbasierte Validierung verwendet
  5. Ein modulares und wiederverwendbares Validierungssystem mit einer Hilfsklasse (Utility Class) erstellt

Diese Techniken sind unerlässlich für die Entwicklung robuster Java-Anwendungen, die die unvorhersehbare Natur der Benutzereingaben bewältigen können. Durch die ordnungsgemäße Validierung und Behandlung ungültiger Eingaben können Sie Programmabstürze vermeiden, die Integrität der Daten aufrechterhalten und ein besseres Benutzererlebnis bieten.

Wenn Sie Ihre Java-Programmierreise fortsetzen, denken Sie daran, dass die Eingabevalidierung nicht nur darum geht, Fehler zu vermeiden, sondern auch die Sicherheit und Benutzerfreundlichkeit zu verbessern. Die Prinzipien, die Sie in diesem Lab gelernt haben, können auf verschiedene Arten von Anwendungen angewendet werden, von einfachen Konsolenprogrammen bis hin zu komplexen Webanwendungen.