CodeGym /Blog Java /Random-PL /Metoda skanera nextLine() w Javie
John Squirrels
Poziom 41
San Francisco

Metoda skanera nextLine() w Javie

Opublikowano w grupie Random-PL
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)
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION