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
hasNextIntalbo 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
- Odczytywanie danych wejściowych za pomocą Scanner
- Odczytywanie liczb i wierszy
- Walidacja danych użytkownika
- Alternatywa dla BufferedReader