Java Scanner-Klasse

java.util.Scanner ist eine neue Funktion in Java 5. Wir können Benutzereingaben über die Scanner-Klasse erhalten.

Das Folgende ist die grundlegende Syntax zum Erstellen eines Scanner-Objekts:

Scanner s = new Scanner(System.in);

Als Nächstes demonstrieren wir eine einfache Dateneingabe und erhalten die Eingabezeichenfolge über die Methoden next() und nextLine() der Scanner-Klasse. Vor dem Lesen müssen wir im Allgemeinen hasNext und hasNextLine verwenden, um festzustellen, ob noch Eingabedaten vorhanden sind:

Verwendung der next-Methode:

Code der Datei ScannerDemo.java:

import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //Daten von der Tastatur empfangen //Empfangen einer Zeichenkette mit der Methode next System.out.println("Empfangen mit der Methode next:"); //Feststellen, ob noch Eingaben vorhanden sind if (scan.hasNext()) { String str1 = scan.next(); System.out.println("Die Eingabedaten sind:" + str1); } scan.close(); } }

Die Ausgabe nach der Ausführung des obigen Programms ist:

$ javac ScannerDemo.java
$ java ScannerDemo
next方式接收:
example com
输入的数据为:example

Es ist zu sehen, dass die Zeichenkette com nicht ausgegeben wurde. Als Nächstes sehen wir uns nextLine an.

Verwendung der Methode nextLine:

Code der Datei ScannerDemo.java:

import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //Daten von der Tastatur empfangen //Empfangen einer Zeichenkette mit der Methode nextLine System.out.println("Empfangen mit der Methode nextLine:"); //Feststellen, ob noch Eingaben vorhanden sind if (scan.hasNextLine()) { String str2 = scan.nextLine(); System.out.println("Die Eingabedaten sind:" + str2); } scan.close(); } }

Die Ausgabe nach der Ausführung des obigen Programms ist:

$ javac ScannerDemo.java
$ java ScannerDemo
nextLine方式接收:
example com
输入的数据为:example com

Man kann sehen, dass die Zeichenkette com ausgegeben wird.

Unterschied zwischen next() und nextLine()

next():

  • 1. Die Eingabe kann erst beendet werden, nachdem gültige Zeichen gelesen wurden.
  • 2. Bei Whitespace, der vor gültigen Eingabezeichen auftritt, entfernt die Methode next() diesen automatisch.
  • 3. Erst nachdem gültige Zeichen eingegeben wurden, wird der Whitespace danach als Trennzeichen oder Abschluss verwendet.
  • next() kann keine Zeichenkette mit Leerzeichen erhalten.

nextLine():

  • 1. Die Eingabetaste ist das Abschlusszeichen, das heißt, die Methode nextLine() gibt alle Zeichen zurück, bevor die Eingabetaste eingegeben wird.
  • 2. Sie kann Leerraum erfassen.

Wenn Sie Daten vom Typ int oder float eingeben möchten, unterstützt die Scanner-Klasse dies ebenfalls, aber vor der Eingabe ist es am besten, die Methode hasNextXxx() zur Validierung zu verwenden und dann nextXxx() zum Einlesen zu nutzen:

Code der Datei ScannerDemo.java:

import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); //Daten von der Tastatur empfangen int i = 0; float f = 0.0f; System.out.print("Geben Sie eine ganze Zahl ein:"); if (scan.hasNextInt()) { //Prüfen, ob die Eingabe eine ganze Zahl ist i = scan.nextInt(); //Ganzzahl empfangen System.out.println("Integer-Daten:" + i); } else { //Fehlermeldung bei der Eingabe System.out.println("Die Eingabe ist keine ganze Zahl!"); } System.out.print("Geben Sie eine Dezimalzahl ein:"); if (scan.hasNextFloat()) { //Prüfen, ob die Eingabe eine Dezimalzahl ist f = scan.nextFloat(); //Dezimalzahl empfangen System.out.println("Dezimaldaten:" + f); } else { //Fehlermeldung bei der Eingabe System.out.println("Die Eingabe ist keine Dezimalzahl!"); } scan.close(); } }

Die Ausgabe nach der Ausführung des obigen Programms ist:

$ javac ScannerDemo.java
$ java ScannerDemo
输入整数:12
整数数据:12
输入小数:1.2
小数数据:1.2

Im folgenden Beispiel können wir mehrere Zahlen eingeben und ihre Summe und ihren Durchschnitt berechnen. Jede Zahl wird durch Drücken der Eingabetaste bestätigt. Beenden Sie die Eingabe durch Eingabe einer Nicht-Zahl, dann wird das Ausführungsergebnis ausgegeben:

Code der Datei ScannerDemo.java:

import java.util.Scanner; class ExampleTest { public static void main(String[] args) { System.out.println("Bitte geben Sie eine Zahl ein:"); Scanner scan = new Scanner(System.in); double sum = 0; int m = 0; while (scan.hasNextDouble()) { double x = scan.nextDouble(); m = m + 1; sum = sum + x; } System.out.println(m + "Die Summe der Zahlen ist" + sum); System.out.println(m + "Der Durchschnitt der Zahlen ist" + (sum / m)); scan.close(); } }

Die Ausgabe nach Ausführung des obigen Programms ist (geben Sie eine Nicht-Zahl ein, um die Eingabe zu beenden):

$ javac ScannerDemo.java
$ java ScannerDemo
请输入数字:
12
23
15
21.4
end
4个数的和为71.4
4个数的平均值是17.85

Häufig verwendete Methoden

Methode Beschreibung
Konstruktoren
Scanner(File source) Scanner aus einer Datei erstellen
Scanner(InputStream source) Scanner aus einem Eingabestream erstellen
Scanner(String source) Scanner aus einer Zeichenkette erstellen
Grundlegende Eingabemethoden
boolean hasNext() Prüfen, ob ein nächstes Token vorhanden ist (durch Leerzeichen getrennt)
String next() Das nächste Token lesen (Zeichenkette)
boolean hasNextLine() Prüfen, ob eine nächste Zeile vorhanden ist
String nextLine() Den Inhalt der nächsten Zeile lesen
Methoden zur Typprüfung
boolean hasNextInt() Prüfen, ob das nächste Token eine Ganzzahl ist
boolean hasNextDouble() Prüfen, ob das nächste Token ein double ist
boolean hasNextBoolean() Prüfen, ob das nächste Token ein boolean ist
Methoden zum Lesen von Typen
int nextInt() Die nächste Ganzzahl lesen
double nextDouble() Das nächste double lesen
boolean nextBoolean() Das nächste boolean lesen
long nextLong() Die nächste long-Ganzzahl lesen
float nextFloat() Das nächste float lesen
short nextShort() Die nächste short-Ganzzahl lesen
byte nextByte() Das nächste Byte lesen
Delimiter-Steuerung
Scanner useDelimiter(String pattern) Trennzeichenmuster festlegen
Scanner useDelimiter(Pattern pattern) Trennzeichen mithilfe eines regulären Ausdrucks festlegen
String delimiter() Gibt das aktuell verwendete Trennzeichenmuster zurück
Andere Methoden
void close() Schließt den Scanner
Scanner skip(Pattern pattern) Überspringt Eingaben, die dem angegebenen Muster entsprechen
Scanner skip(String pattern) Überspringt Eingaben, die der angegebenen Zeichenfolge entsprechen
String findInLine(Pattern pattern) Sucht das angegebene Muster in der aktuellen Zeile
String findInLine(String pattern) Sucht die angegebene Zeichenfolge in der aktuellen Zeile
Scanner reset() Setzt den Scanner zurück
Locale locale() Gibt das aktuell vom Scanner verwendete Gebietsschema zurück
Scanner useLocale(Locale locale) Legt das Gebietsschema des Scanners fest

Weitere Inhalte finden Sie in der API-Dokumentation:https://www.example.com/manual/jdk11api/java.base/java/util/Scanner.html。

Weitere Erweiterungen