Scanner , klasa w języku programowania Java, która potrafi analizować typy pierwotne i ciągi znaków przy użyciu wyrażeń regularnych. Metoda skanera nextLine() w Javie przenosi ten skaner poza bieżącą linię i zwraca pominięte dane wejściowe. Więcej o nextLine() i skanerze w dalszej części tego artykułu.
Krótko o klasie Scanner i działaniu
Z grubsza mówiąc, klasa java.util.Scanner umożliwia odczytywanie danych wejściowych z różnych źródeł, w tym z konsoli. Wyglądem przypomina klasyczny skaner. To urządzenie sprzętowe ma skomplikowaną architekturę, ale dość łatwo opisać jego działanie. Skaner odczytuje datę umieszczoną na nim przez użytkownika, na przykład na papierze, i przechowuje dane w pamięci w postaci zdjęcia lub pliku PDF. Skaner Java, podobnie jak prawdziwy, odczytuje dane ze źródła, które dla niego określisz. Na przykład z ciągu znaków, z pliku, z konsoli. Następnie rozpoznaje te informacje i przetwarza je według potrzeb. Przykładowo program prosi o wprowadzenie jakichś danych z konsoli i odczytuje je lub chce odczytać z pliku. W przypadku tej operacji skaner ma kilka metod połączonych ze słowem „dalej”. Na przykład next() , nextLine() , nextInt() , nextDouble() .metoda nextLine().
Jak powiedzieliśmy powyżej, obiekt skanera dzieli dane wejściowe na tokeny, używając domyślnie wzorca ograniczników, białych znaków, ale można je zastąpić ciągiem znaków ( java.lang.String ) lub wyrażeniem regularnym ( java.util.regex. Wzór ). Powstałe tokeny można następnie przekonwertować na wartości różnych typów przy użyciu różnych metod next. Metoda Scanner nextLine() w Javie przesuwa ten skaner poza bieżący wiersz i zwraca pominięte dane wejściowe. Ogólne next() wyszukuje i zwraca następny kompletny token z tego skanera. nextLine() kontynuuje wyszukiwanie na wejściu separatora linii, więc może buforować wszystkie dane wejściowe w poszukiwaniu linii do pominięcia, jeśli nie ma separatorów linii. Ta metoda zgłasza kolejne wyjątki:- NoSuchElementException: zgłasza, jeśli nie znaleziono żadnej linii
- IllegalStateException: zgłasza, jeśli ten skaner jest zamknięty
przykład nextLine().
Załóżmy, że chcemy, aby użytkownik wprowadził do konsoli dowolne słowo lub frazę i moglibyśmy pokazać mu, jakie słowo lub frazę wprowadził.
import java.util.Scanner;
//…scanner.nextLine() example
public class ScannerTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter any phrase and I'll repeat it!... ");
//here we are reading the next line:
String sentence = scan.nextLine();
System.out.println(sentence);
}
}
Dane wyjściowe mogą być na przykład następujące:
Wpisz dowolne zdanie, a ja je powtórzę!... oto moje zdanie Oto moje zdanie
Jeśli użyjesz metody next() zamiast nextLine() , otrzymasz tylko pierwsze słowo swojego zdania.
Wpisz dowolne zdanie, a ja je powtórzę!...tutaj jest moje zdanie
Spójrzmy na przykład działającej metody nextLine() skanera do odczytu z pliku. Na potrzeby tego przykładu utworzyłem plik txt myTest.txt. W tym pliku znajdują się dwie linie:
mój plik testowy i następna linia są tutaj
Oto program, który czyta dwie linie z pliku.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) throws FileNotFoundException {
Scanner scanner = new Scanner(new File("d://myTest.txt"));
String textFromFile1 = scanner.nextLine();
String textFromFile2 = scanner.nextLine();
System.out.println(textFromFile1);
System.out.println(textFromFile2);
scanner.close();
}
}
Dane wyjściowe to:
mój plik testowy i następna linia są tutaj
Jeśli ścieżka do pliku jest błędna lub plik o takiej nazwie nie istnieje, otrzymasz następujący wynik:
Wyjątek w wątku „main” java.io.FileNotFoundException: d:\myTest.txt w java.base/java.io.FileInputStream.open0 (metoda natywna) w java.base/java.io.FileInputStream.open (FileInputStream.java :213) w java.base/java.io.FileInputStream.<init>(FileInputStream.java:155) w java.base/java.util.Scanner.<init>(Scanner.java:639) w ScannerTest.main( ScannerTest.java:8)
Jeśli program znalazł Twój plik, ale jest on pusty, otrzymasz wyjątek NoSuchElementException:
Wyjątek w wątku „main” java.util.NoSuchElementException: Nie znaleziono wiersza w java.base/java.util.Scanner.nextLine(Scanner.java:1651) w ScannerTest.main(ScannerTest.java:10)
GO TO FULL VERSION