Jak korzystać ze skanera w Javie

How Use Scanner Java



Skaner w Javie to klasa w pakiecie java.util. Ta klasa ma na celu odczytanie danych wejściowych z ciągu, klawiatury, pliku lub gniazda sieciowego. Ten artykuł koncentruje się tylko na odczytywaniu danych wejściowych z klawiatury i wyświetlaniu wyniku w oknie terminala. Podobne pomysły można wykorzystać do odczytu danych wejściowych z pliku lub kanału sieciowego. Skaner nie drukuje w oknie terminala. Aby drukować na terminalu, użyj obiektu System.out. Łatwo jest użyć tego obiektu do drukowania na terminalu, jak pokazano poniżej.

Aby użyć klasy Scanner, należy ją najpierw zaimportować. Następnie należy z niego utworzyć instancję obiektu. Po użyciu obiektu Scanner należy go zamknąć. Obiekt strumienia wejściowego, który reprezentuje klawiaturę, to System.in. Skaner ma wiele metod. W tym artykule wyjaśnimy tylko te powszechnie używane.







Treść artykułu



Proste użycie klasy skanera

Poniższy kod prosi użytkownika o wpisanie zdania, a następnie wyświetla zdanie:



import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
Skaner scanObj= NowySkaner( System .w);
System .na zewnątrz.drukuj('Wpisz zdanie i naciśnij Enter:');

Strunowy zdanie=scanObj.następna linia();
System .na zewnątrz.drukuj(zdanie);

scanObj.blisko();
}
}

Pierwsza linia importuje klasę Scanner. W funkcji głównej pierwsza linia tworzy obiekt skanera przy użyciu obiektu System.in dla klawiatury. Zaraz po utworzeniu obiektu skanera zaczyna on czekać na dane wejściowe. Następna linia wyświetla instrukcję, prosząc użytkownika o wpisanie zdania. Wiersz następujący w kodzie używa metody nextLine() obiektu skanera do odczytania zdania użytkownika po naciśnięciu klawisza Enter. Wiersz po, w kodzie, ponownie drukuje zdanie w oknie terminala. Ostatnia linia zamyka obiekt skanera.





Plucie linii wejściowej na wartości

Poniższy kod dzieli wiersz wejściowy na słowa (tokeny), używając spacji jako separatora:

import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
Skaner scanObj= NowySkaner( System .w);
System .na zewnątrz.drukuj('Wpisz wiersz tokenów i naciśnij Enter:');

podczas(scanObj.maDalej()){
System .na zewnątrz.drukuj(scanObj.Następny());
}

scanObj.blisko();
}
}

hasNext() i next() to dwie inne metody obiektu skanera. Kiedy obiekt skanera odczytuje linię, zatrzymuje ją. next() uzyskuje dostęp do następnego tokena (słowa). hasNext() zwraca prawdę, jeśli istnieje jakikolwiek inny token, do którego jeszcze nie uzyskano dostępu.



Niestety, użytkownik nadal powinien wpisywać dane wejściowe do dzielenia i ponownego wyświetlania za pomocą tego kodu. Aby to wszystko zakończyć, naciśnij Ctrl + z i powinieneś wrócić do wiersza polecenia.

W powyższym kodzie ogranicznik oddziela żetony w spacji. Można użyć innego znaku. W poniższym kodzie użyto przecinka. Nie zapomnij nacisnąć Ctrl+z, aby zakończyć pętlę, jeśli testujesz kod.

import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
Skaner scanObj= NowySkaner( System .w);
System .na zewnątrz.drukuj('Wpisz wiersz tokenów i naciśnij Enter:');

scanObj.użyjDelimiter(',');

podczas(scanObj.maDalej()){
System .na zewnątrz.drukuj(scanObj.Następny());
}

scanObj.blisko();
}
}

Jeśli testowałeś kod, zauważyłbyś, że spacje w tokenach zostały uwzględnione jako część tokenów (wyjście). Wyrażenie scanObj.useDelimiter(,); wpisywane po odczytaniu wiersza wejściowego; to właśnie tworzy przecinek, separator.

Odczytywanie i sprawdzanie pierwotnych typów danych

metoda nextBoolean()

W poniższym kodzie użytkownik powinien wpisać prawdę lub fałsz bez cudzysłowów, a następnie nacisnąć klawisz Enter, jeśli użytkownik wpisze cokolwiek innego, na przykład tak lub nie, zostanie wyświetlony komunikat o błędzie.

import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
System .na zewnątrz.wydrukować(„Czy masz powyżej 24 lat? ');
Skaner scanObj= NowySkaner( System .w);

logicznebl=scanObj.nextBoolean();
Jeśli (bl== prawda) {
System .na zewnątrz.drukuj(„Masz ponad 24 lata”);
}
w przeciwnym razie Jeśli (bl== fałszywe) {
System .na zewnątrz.drukuj(„Masz mniej niż 24 lata”);
}

scanObj.blisko();
}
}

Ponieważ java wyświetli komunikat o błędzie, o ile dane wejściowe nie są dokładnie prawdziwe lub fałszywe, użyto else if zamiast else.

Różnica między metodami print i println polega na tym, że print oczekuje danych wejściowych w bieżącym wierszu, podczas gdy println oczekuje danych wejściowych w następnym wierszu.

metoda nextByte()

W przypadku zestawu znaków ASCII znak to jeden bajt. Jednak w przypadku niektórych zestawów znaków wschodnich znak może składać się z więcej niż jednego bajtu. Niezależnie od zestawu znaków metoda nextByte odczytuje i sprawdza poprawność następnego bajtu danych wejściowych. W tym celu można użyć następującego kodu:

import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
System .na zewnątrz.wydrukować(„Numer typu”<128, press Enter: ');
Skaner scanObj= NowySkaner( System .w);

bajtbt=scanObj.następny bajt();
System .na zewnątrz.drukuj(bt);

scanObj.blisko();
}
}

Jeśli dla tego kodu zostanie wprowadzona liczba większa niż 127 lub znak alfabetu, zostanie wyświetlony komunikat o błędzie.

Metoda nextInt()

Następny token liczby całkowitej jako dane wejściowe również może zostać zweryfikowany i zaakceptowany. Można użyć następującego kodu:

import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
System .na zewnątrz.wydrukować('Wprowadź dowolną liczbę całkowitą: ');
Skaner scanObj= NowySkaner( System .w);

intna jednego=scanObj.nextInt();
System .na zewnątrz.drukuj(na jednego);

scanObj.blisko();
}
}

Usunięto spacje wiodące lub końcowe. W przypadku tego kodu akceptowana byłaby każda wartość całkowita, w tym wartości większe niż 127. W przypadku tych metod nextXXX(), gdy walidacja się nie powiedzie, pojawia się komunikat o błędzie.

Metoda nextBigInteger()

Wygląda na to, że inżynierowie oprogramowania nigdy nie przestaną wymyślać nowych rzeczy. Duża liczba całkowita to liczba całkowita, której wartość jest znacznie większa niż liczba całkowita. Jednak w Javie można ją odczytać w taki sam sposób, jak liczbę całkowitą. Poniższy kod ilustruje to:

import java.util.Scanner;
import java.math.BigInteger;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
System .na zewnątrz.drukuj('Wprowadź dowolną liczbę całkowitą dla dużej liczby całkowitej: ');
Skaner scanObj= NowySkaner( System .w);

Duża liczba całkowita na jednego=scanObj.następnyBigInteger();
System .na zewnątrz.drukuj(na jednego);

scanObj.blisko();
}
}

Zwróć uwagę na instrukcję importu, import java.math.BigInteger;. Należy również zauważyć, że typ dużej liczby całkowitej zaczyna się od wielkiej litery B, a nie od małej litery b.

Metoda nextFloat()

Następny token zmiennoprzecinkowy jako dane wejściowe również może zostać zweryfikowany i zaakceptowany. Można użyć następującego kodu:

import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
System .na zewnątrz.wydrukować('Wprowadź dowolną liczbę zmiennoprzecinkową: ');
Skaner scanObj= NowySkaner( System .w);

pływakna jednego=scanObj.następnyPływak();
System .na zewnątrz.drukuj(na jednego);

scanObj.blisko();
}
}

Przykładem liczby zmiennoprzecinkowej jest 23.456. Usunięto spacje wiodące lub końcowe.

następnyPodwójny()

Następny podwójny token jako dane wejściowe również może zostać zweryfikowany i zaakceptowany. Można użyć następującego kodu:

import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
System .na zewnątrz.wydrukować('Wprowadź dowolny podwójny:');
Skaner scanObj= NowySkaner( System .w);

podwójniena jednego=scanObj.następnyDouble();
System .na zewnątrz.drukuj(na jednego);

scanObj.blisko();
}
}

Przykładem liczby podwójnej jest 23.456. Liczba podwójna różni się od liczby zmiennoprzecinkowej, ponieważ ma mniejszy margines błędu. Usunięto spacje wiodące lub końcowe.

metoda nextLine()

Metoda nextLine() jest przeznaczona dla ciągu. Jeśli ciąg jest wierszem wejściowym z klawiatury po naciśnięciu klawisza Enter, może zawierać znak nowej linii „ ”. Można użyć następującego kodu:

import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
System .na zewnątrz.drukuj('Wprowadź linię mając\n : ');
Skaner scanObj= NowySkaner( System .w);

Strunowy P=scanObj.następna linia();
System .na zewnątrz.drukuj(P);

scanObj.blisko();
}
}

Zauważ, że typ ciągu zaczyna się od wielkiej litery S, a nie od małej litery s.

Metody nextLine(), hasNext() i next() zostały użyte wcześniej, w tym artykule. Skaner ma inne metody i inne prymitywne metody danych – patrz dalej.

Przypisywanie danych wejściowych do zmiennej

Wejście można przypisać do zmiennej, jak pokazuje poniższy kod:

import java.util.Scanner;

publiczny klasaKlasa{
publiczny statyczny próżniaGłówny( Strunowy []argumenty) {
Skaner scanObj= NowySkaner( System .w);

System .na zewnątrz.wydrukować('Wprowadź imię: ');
Strunowy Nazwa=scanObj.następna linia();

System .na zewnątrz.wydrukować('Wpisz wiek:');
intwiek=scanObj.nextInt();

System .na zewnątrz.wydrukować('Wpisz wynagrodzenie:');
podwójniepensja=scanObj.następnyDouble();

System .na zewnątrz.drukuj('Nazwa: ' +Nazwa+ ', Wiek: ' +wiek+ ', Pensja: ' +pensja);

scanObj.blisko();
}
}

Wniosek

Skaner w Javie to klasa w pakiecie java.util. Ta klasa ma na celu odczytanie danych wejściowych z ciągu, klawiatury, pliku lub gniazda sieciowego. Ten artykuł skoncentrował się głównie na odczytywaniu danych wejściowych z klawiatury i wyświetlaniu wyniku w oknie terminala. Podobne pomysły można wykorzystać do odczytywania danych wejściowych z ciągu, pliku lub kanału sieciowego.

Aby odczytać cały wiersz danych wejściowych z klawiatury, użyj metody nextLine(). Wiersz jako ciąg znaków można podzielić na tokeny za pomocą metod hasNext() i next() oraz pętli while. Domyślnym ogranicznikiem podziału jest spacja, ale programista może wybrać inny ogranicznik. Nie zapomnij użyć Ctrl+z, aby zatrzymać pętlę while, jeśli to konieczne. Usuwanie spacji wiodących i końcowych można wykonać za pomocą innych schematów, które nie zostały omówione w tym artykule. Walidację tokenów można również przeprowadzić za pomocą innych schematów, które nie zostały omówione w tym artykule.

Wartości pierwotne mogą być odczytywane za pomocą nextBoolean(), nextByte(), nextInt() itd. Te metody nextXXX() przeprowadzają walidację, a także usuwają początkowe i końcowe spacje.

Skaner Java ma o wiele więcej metod. Jednak podstawowe użycie skanera zostało wyjaśnione w tym artykule. Wybór tokena odbywa się w rzeczywistości za pomocą technik wyrażeń regularnych. Użycie technik wyrażeń regularnych jest dyskusją, innym razem.