Odczytywanie danych wejściowych za pomocą Scanner
Odczytuj dane użytkownika z System.in
Odczytywanie danych wejściowych za pomocą Scanner to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 1 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.
Odczytywanie z klawiatury
Do odczytywania danych wpisywanych przez użytkownika Java udostępnia klasę Scanner w pakiecie java.util. Należy połączyć ją z System.in, czyli standardowym strumieniem wejściowym.
Scanner ułatwia odczytywanie słów, wierszy i liczb.
Tworzenie obiektu Scanner
Obiekt Scanner należy utworzyć, przekazując System.in. W przedstawionych przykładach użyto stałych ciągów znaków, aby można je było uruchomić bez danych wejściowych, ale te same metody mają zastosowanie do danych wpisywanych z klawiatury.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("Hello");
String word = scanner.next();
System.out.println(word);
scanner.close();
}
}Odczytywanie pojedynczego słowa
next() odczytuje jeden token, czyli tekst aż do napotkania kolejnego białego znaku. Spacje i znaki nowego wiersza oddzielają tokeny.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("apple banana cherry");
System.out.println(scanner.next());
System.out.println(scanner.next());
scanner.close();
}
}Odczytywanie całego wiersza
nextLine() odczytuje wszystko aż do końca wiersza, łącznie ze spacjami. Należy użyć tej metody, gdy dane wejściowe zawierają wiele słów, które mają zostać odczytane razem.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("John Smith");
String fullName = scanner.nextLine();
System.out.println("Name: " + fullName);
scanner.close();
}
}Sprawdzanie, czy są dalsze dane
hasNext() zwraca wartość true, dopóki istnieją kolejne tokeny. Pozwala to wykonywać pętlę aż do wyczerpania danych wejściowych.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("red green blue");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}Odczytywanie wiersz po wierszu
hasNextLine() należy połączyć z nextLine(), aby przetwarzać dane wielowierszowe po jednym wierszu.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("line one\nline two\nline three");
while (scanner.hasNextLine()) {
System.out.println("> " + scanner.nextLine());
}
scanner.close();
}
}Przykład użycia prawdziwej klawiatury
W przypadku rzeczywistych danych wejściowych użytkownika należy napisać poniższe wiersze. Należy wypróbować je lokalnie: program zatrzyma się przy nextLine i będzie czekać, aż zostanie wpisany tekst i naciśnięty klawisz Enter.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine();
System.out.println("Hello, " + name);
scanner.close();
}
}Zamykanie obiektu Scanner
Wywołanie close() zwalnia zasób. Czytelniejszym rozwiązaniem jest konstrukcja try-with-resources, która automatycznie zamyka skaner po zakończeniu bloku.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner("data here")) {
System.out.println(scanner.next());
}
}
}next a nextLine
Należy pamiętać o kluczowej różnicy: next() zatrzymuje się na białym znaku i zwraca jeden token, natomiast nextLine() pobiera pozostałą część bieżącego wiersza.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("first second third");
System.out.println(scanner.next());
System.out.println(scanner.nextLine());
scanner.close();
}
}Własne separatory
Za pomocą useDelimiter można zmienić sposób oddzielania tokenów. W tym przypadku wartości rozdziela przecinek zamiast białych znaków.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("a,b,c");
scanner.useDelimiter(",");
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}Podstawy klasy Scanner
Należy utworzyć jeden obiekt Scanner dla System.in, używać next do odczytywania słów, a nextLine do odczytywania całych wierszy, wykonywać pętlę z użyciem metod z rodziny hasNext i zawsze zamykać skaner.
Szybki test
Sprawdź podstawową znajomość klasy Scanner.
Podsumowanie
Poznałeś odczytywanie danych wejściowych za pomocą klasy Scanner:
- Obiekt należy utworzyć za pomocą
new Scanner(System.in) next()odczytuje słowo, anextLine()cały wiersz- Pętlę należy wykonywać z użyciem
hasNext()lubhasNextLine() - Obiekt należy zamknąć za pomocą
close()lub konstrukcji try-with-resources useDelimiterzmienia separator tokenów
Często zadawane pytania
Czy lekcja „Odczytywanie danych wejściowych za pomocą Scanner” jest bezpłatna?
Tak — pełny tekst „Odczytywanie danych wejściowych za pomocą Scanner” 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 „Odczytywanie danych wejściowych za pomocą Scanner”?
Odczytuj dane użytkownika z System.in Ć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 1 z 4.
Ile czasu zajmuje lekcja „Odczytywanie danych wejściowych za pomocą Scanner”?
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