Java-Scanner-Klasse mit Beispielen

In diesem Artikel wird die Scannerklasse in Java anhand einiger Beispiele und Abbildungen erläutert. Sobald Sie die Grundlagen der Programmierung kennen, ist es für einen Entwickler an der Zeit, mit Anfängerprogrammen im Textmodus (Konsole) zu arbeiten.

Viele beginnen mit der Verwendung der Scannerklasse, gerade weil sie die Dateneingabe in die Konsole erleichtert. Java 5 hat diese Klasse eingeführt. Zuvor war es schwierig, Programme zu erstellen, die Variablenwerte im Konsolenmodus empfingen.

Java-Scanner-Konzept

Für viele ist die Bedeutung der Scanner-Klasse am Anfang oft kompliziert und schwer zu verstehen. Mit der Zeit und Mühe kann der Programmierer jedoch die Definition verstehen. Ein einfacher Textscanner analysiert primitive Typen und Strings mithilfe regulärer Ausdrücke.

Die Klasse Scanner zielt darauf ab, die Texteingabe in Blöcke zu unterteilen und die bekannten Token zu generieren, bei denen es sich um Zeichenfolgen handelt, die standardmäßig durch Trennzeichen getrennt sind, die Leerzeichen, Tabulatoren und Zeilenumbrüchen entsprechen.

Mit dieser Klasse können Sie Text in Grundelemente umwandeln. Die Texte gelten als Objekte vom Typ String, InputStream und Dateien.

  • Was ist ein transientes Schlüsselwort in Java?
  • Wie verwende ich ByteBuffer in Java?
  • Verwendung von Lambda-Ausdrücken von Java 8 in Java FX-Ereignishandlern

Java-Scanner in der Praxis

Importieren der Scanner-Klasse in Java

Zunächst müssen Sie die Funktionen und Merkmale dieser Klasse kennen. Wenn Sie die Scanner-Klasse verwenden, werden Sie vom Compiler aufgefordert, die folgenden Importe durchzuführen:

[java]
import java.util.Scanner;
[/java]

Deklarationsscanner

Wie in der Einleitung beschrieben, unterstützt diese Klasse das Lesen von Daten. Das folgende Beispiel zeigt, wie das Scanner-Objekt verwendet wird.

Es ist notwendig, ein Objekt vom Typ Scanner und dann ein Objektargument zu erstellen System.in an den Scanner-Konstruktor wie folgt:

[java]
package net.javabeat;

import java.util.Scanner;

public class TestScannerDeclaration {
	public static void main(String[] args) {
		// Read from the command line
		Scanner sc1 = new Scanner(System.in);
		String textString = "Manisha Patil";
		// Read from a String
		Scanner sc2 = new Scanner(textString);
	}
}
[/java]

Zählen Sie Token in der Zeichenfolge

Nachdem Sie nun Ihre Scannerklasse erstellt haben, konzentrieren Sie sich darauf, das Lesen der Daten zu erlernen. Das folgende Beispiel zeigt, dass wir jedes Token in der Eingabe durchlaufen müssen, um Daten zu lesen.

[java]
package net.javabeat;

import java.util.Scanner;

public class CountTokens {
	public static void main (String [] args) {
        int i = 0;
        Scanner sc = new  Scanner(System. in );
        System.out.print("Enter some text:" );
        while (sc.hasNext()) {
            i++;
            System.out.println("Token:" + sc.next ());
        }
        sc.close(); // End of program
    }
}
[/java]

Das Objekt System.in übernimmt die Eingabe, die Sie über Ihre Tastatur eingeben.

Methoden der Klasse Scanner

Nachfolgend sind einige der wichtigsten Methoden aufgeführt, die je nach Eingabedatentyp aufgerufen werden können. Für jedes Grundelement gibt es einen Methodenaufruf, um den Wert des Eingabedatentyps zurückzugeben.

[java]
Scanner sc = new  Scanner(System.in);

float numF = sc.nextFloat();
int num1 = sc.nextInt();
byte byte1 = sc.nextByte();
long lg1 = sc.nextLong();
boolean b1 = sc.nextBoolean();
double num2 = sc.nextDouble();
String name = sc.nextLine();
[/java]

Demonstration von InputMismatchException

Die Klasse Scanner liest Daten als Befehlszeilenargumente. Daher empfiehlt es sich immer, Try/Catch zu verwenden. Mit Try/Catch können Sie Ausnahmen vermeiden, die durch die Eingabe eines falschen Datentyps verursacht werden.

Im folgenden Bild können Sie beispielsweise sehen, dass der falsche Datentypeintrag eine Ausnahme verursacht. Die Methode erwartete Daten vom Typ Double.

Demonstration der Ausnahme InputMismatchException

Methoden der Scannerklasse

Nachfolgend finden Sie eine Liste einiger der Hauptmethoden der Scanner-Klasse.

  • schließen(): Schließt den aktuellen Scanner.
  • findInLine(): Versucht, das nächste Vorkommen des angegebenen Musters zu finden, wobei Trennzeichen ignoriert werden.
  • hasNext(): Gibt „true“ zurück, wenn dieser Scanner ein anderes Token in seiner Eingabe hat.
  • hasNextXyz(): Gibt „true“ zurück, wenn das nächste Token in der Eingabe dieses Scanners mithilfe der Methode nextXyz() als Xyz in der Standardbasis interpretiert werden kann. Hier kann Xyz einer der folgenden Typen sein: BigDecimal, BigInteger, Boolean, Byte, Short, Int, Long, Float oder Double.
  • übereinstimmen(): Gibt das Übereinstimmungsergebnis des letzten von diesem Scanner durchgeführten Scanvorgangs zurück.
  • nächste(): Findet das nächste vollständige Token von diesem Scanner und gibt es zurück.
  • nextXyz(): Scannt das nächste Token der Eingabe als Xyz, wobei Xyz einen der folgenden Typen haben kann: boolean, byte, short, int, long, float oder double.
  • nächste Zeile(): Bewegt diesen Scanner über die aktuelle Zeile hinaus und gibt die übersprungene Eingabe zurück.
  • radix(): Gibt den aktuellen Index des Scanner-Objekts zurück.
  • entfernen(): Die Implementierung eines Iterators unterstützt diesen Vorgang nicht.
  • überspringen(): Springen Sie zur nächsten Suche nach einem angegebenen Muster und ignorieren Sie dabei Trennzeichen.
  • string(): Gibt eine Zeichenfolgendarstellung des Objekts zurück, bei dem es sich um einen Scanner handelt.
Beispiel

Schauen Sie sich dieses umfassende Beispiel für die Verwendung der Scanner-Klasse an.

Die Klassen IndividualScannerTest und Person verwenden objektorientierte Programmierung (OOP). OOP zielt darauf ab, Objektmanipulation zu zeigen. Methodensetzer (setAttributeName) behalten den eingegebenen Wert bei. Die Werte werden dann verwendet, um die Ausgabe jedes in der Liste erstellten Objekts zu generieren.

[java]
package net.javabeat;

public class Person {
	private Integer code;
	private String name;
	private String address;
	private Integer age;

	public Integer getCode() {
		return code;
	}

	public void setCode(Integer code) {
		this.code = code;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "code:" + code + "" + "\n" + "Name:" + name + "" + "\n"
				+ "Address:" + address + "" + "\n" + "Age:" + age + "\n";
	}
}
[/java]

Die Klasse IndividualScannerTest zeigt, dass mehrere Person-Objekte in einer Liste gespeichert und später gedruckt werden können.

Machen Sie einen Test, fügen Sie zwei oder mehr Einträge ein und wählen Sie dann Option 2. Alle in der Liste gespeicherten Personenobjekte werden gedruckt.

[java]
package net.javabeat;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class IndividualScannerTest {
	public static void main(String[] args) {
		peopleData();
	}

	public static void peopleData() {
		Scanner sc = new Scanner(System.in);
		Person person;
		List<Person> personList = new ArrayList<Person>();
		int option = 0;

		do {
			System.out.println("# # Choose one of the options below # #");
			System.out.println("Option 1 - Enroll people");
			System.out.println("Option 2 - Print people registered");
			System.out.println("Option 0 - Exit program");
			System.out.println("_______________________");

			System.out.print("Enter your choice here:");
			option = Integer.parseInt(sc.nextLine());

			if (option == 1) {
				// Create a new object
				person = new Person();

				System.out.print("Enter code:");
				person.setCode(Integer.parseInt(sc.nextLine()));

				System.out.print("Enter the name:");
				person.setName(sc.nextLine());

				System.out.print("Enter the address:");
				person.setAddress(sc.nextLine());

				System.out.print("Enter the age:");
				person.setAge(Integer.parseInt(sc.nextLine()));

				System.out.println();

				// Holds the person object in a list.
				personList.add(person);
			} else if (option == 2) {
				if (personList.isEmpty()) {
					System.out
							.println("There are people registered, press any key to continue");
					sc.nextLine();
				} else {
					System.out.println(personList.toString());

					System.out.println("Press one key to continue.");
					sc.nextLine();
				}
			}
		} while (option != 0);

		sc.close();
	}
}

[/java]

Daten aus einer Datei lesen

Im vorherigen Beispiel lesen wir Daten aus der Befehlszeile. Wenn die Daten groß sind, ist es besser, sie in einer Datei zu speichern und die Daten dann aus der Datei zu lesen. Sehen wir uns ein Beispiel an, wie man mithilfe der Scanner-Klasse Daten aus einer Datei liest.

[java]
package net.javabeat;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadFile {
	public static void SpeakIt(String fileName) {
		try {
			File file = new File(fileName);
			Scanner sc = new Scanner(file);
			while (sc.hasNext()) {
				System.out.print(sc.nextLine());
			}

			sc.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		SpeakIt("samplefile.txt"); // change the path of the desired file.
	}
}

[/java]

Weiterführende Literatur:

  • Arbeiten mit dem virtuellen Proxy-Muster
  • Datei asynchron in Java lesen

Wir haben einige grundlegende Konzepte der Scanner-Klasse in Java durchgearbeitet. Programmierer verwenden die Scanner-Klasse in Java, um Daten aus einer Befehlszeileneingabe oder einem Dateisystem zu lesen.

Wenn Sie daran interessiert sind, zukünftige Artikel zu erhalten, abonnieren Sie uns bitte hier. Folge uns auf @twitter und @facebook.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen