0Pricing
Java Academy · Lekcja

Walidacja danych użytkownika

Obsługuj nieprawidłowe dane wejściowe w kontrolowany sposób

Walidacja danych użytkownika to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.

Nigdy nie ufaj danym wejściowym

Użytkownicy wpisują niepoprawne dane: litery zamiast liczb, puste wartości albo liczby spoza zakresu. Solidne programy sprawdzają dane wejściowe i proszą o ich ponowne podanie zamiast się zawieszać.

W tej lekcji pokazano wzorce eleganckiej walidacji z użyciem Scanner.

Sprawdzanie przed odczytem

Najprostszym zabezpieczeniem jest hasNextInt(). Odczytuj liczbę całkowitą tylko wtedy, gdy rzeczywiście jest dostępna.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("42");
        if (scanner.hasNextInt()) {
            System.out.println("Got: " + scanner.nextInt());
        } else {
            System.out.println("Please enter a number");
        }
        scanner.close();
    }
}

Powtarzanie do uzyskania poprawnej wartości

Pętla ponawiająca zapytanie prosi o dane tak długo, aż pojawi się poprawna liczba całkowita. Gdy token jest niepoprawny, odrzuć go za pomocą next() i kontynuuj.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("abc xyz 50");
        int value = -1;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                value = scanner.nextInt();
                break;
            }
            scanner.next();
        }
        System.out.println("Accepted: " + value);
        scanner.close();
    }
}

Sprawdzanie zakresu

Poza odpowiednim typem wartości często muszą także mieścić się w określonym zakresie. Odczytaj liczbę, a następnie sprawdź ją przed zaakceptowaniem.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("7");
        int n = scanner.nextInt();
        if (n >= 1 && n <= 10) {
            System.out.println("Valid: " + n);
        } else {
            System.out.println("Out of range");
        }
        scanner.close();
    }
}

try-catch podczas parsowania

Alternatywne podejście polega na odczytaniu całego wiersza, a następnie jego sparsowaniu i przechwyceniu wyjątku NumberFormatException w przypadku niepoprawnego tekstu. Dzięki temu bufor pozostaje prosty.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("notanumber");
        String line = scanner.nextLine();
        try {
            int n = Integer.parseInt(line.trim());
            System.out.println("Parsed: " + n);
        } catch (NumberFormatException e) {
            System.out.println("Invalid number: " + line);
        }
        scanner.close();
    }
}

Sprawdzanie, czy tekst nie jest pusty

W przypadku danych tekstowych odrzucaj puste wartości. isBlank() zwraca wartość true dla pustych ciągów oraz ciągów zawierających wyłącznie białe znaki.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("   ");
        String name = scanner.nextLine();
        if (name.isBlank()) {
            System.out.println("Name cannot be empty");
        } else {
            System.out.println("Hello, " + name);
        }
        scanner.close();
    }
}

Sprawdzanie wybranej opcji

W przypadku opcji menu upewnij się, że wartość należy do zbioru dozwolonych opcji, zanim podejmiesz na jej podstawie działanie.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("y");
        String choice = scanner.next().toLowerCase();
        if (choice.equals("y") || choice.equals("n")) {
            System.out.println("You chose: " + choice);
        } else {
            System.out.println("Please enter y or n");
        }
        scanner.close();
    }
}

Wielokrotnie używana metoda walidująca

Wydziel walidację do metody, aby można było ponownie wykorzystać tę logikę. W tym przykładzie metoda sprawdza, czy wiek mieści się w rozsądnym zakresie.

public class Main {
    static boolean isValidAge(int age) {
        return age >= 0 && age <= 120;
    }

    public static void main(String[] args) {
        System.out.println(isValidAge(30));
        System.out.println(isValidAge(-5));
    }
}

Łączenie sprawdzania typu i zakresu

Rzeczywista walidacja często łączy sprawdzanie typu, sprawdzanie zakresu oraz pętlę ponawiającą zapytanie w jedną solidną procedurę.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("abc 200 45");
        int valid = -1;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                int n = scanner.nextInt();
                if (n >= 1 && n <= 100) {
                    valid = n;
                    break;
                }
            } else {
                scanner.next();
            }
        }
        System.out.println("Final: " + valid);
        scanner.close();
    }
}

Jasne komunikaty o błędach

Dobra walidacja zapewnia użytkownikowi także pomocne informacje zwrotne. Powiedz dokładnie, co było niepoprawne i czego oczekujesz, zamiast wyświetlać ogólny komunikat o błędzie.

public class Main {
    static String validate(String input) {
        if (input.isBlank()) return "Input is empty";
        if (!input.matches("\\d+")) return "Only digits allowed";
        return "OK";
    }

    public static void main(String[] args) {
        System.out.println(validate(""));
        System.out.println(validate("12a"));
        System.out.println(validate("123"));
    }
}

Strategia walidacji

Sprawdzaj typ za pomocą rodziny metod hasNext lub bloku try-catch, sprawdzaj zakres i to, czy wartość nie jest pusta, powtarzaj operację aż do uzyskania poprawnej wartości i zawsze jasno wyjaśniaj błędy.

Szybki test

Sprawdź swoją wiedzę na temat walidacji danych wejściowych.

Podsumowanie

Nauczyłeś się poprawnie walidować dane wejściowe:

  • Stosuj zabezpieczenie z użyciem hasNextInt albo parsuj dane wewnątrz bloku try-catch
  • Używaj pętli ponawiających zapytanie, odrzucając niepoprawne tokeny za pomocą next()
  • Sprawdzaj zakresy i odrzucaj pusty tekst za pomocą isBlank
  • Wydzielaj wielokrotnie używane metody walidujące
  • Wyświetlaj jasne i konkretne komunikaty o błędach

Często zadawane pytania

Czy lekcja „Walidacja danych użytkownika” jest bezpłatna?

Tak — pełny tekst „Walidacja danych użytkownika” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Walidacja danych użytkownika”?

Obsługuj nieprawidłowe dane wejściowe w kontrolowany sposób Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Java Academy?

Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Walidacja danych użytkownika”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?

Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Odczytywanie danych wejściowych za pomocą Scanner
  2. Odczytywanie liczb i wierszy
  3. Walidacja danych użytkownika
  4. Alternatywa dla BufferedReader
← Powrót do Java Academy