Beginnen wir mit der Beseitigung StringTokenizer
. Es wird alt und unterstützt nicht einmal reguläre Ausdrücke. In der Dokumentation heißt es:
StringTokenizer
ist eine Legacy-Klasse, die aus Kompatibilitätsgründen beibehalten wird, obwohl von ihrer Verwendung in neuem Code abgeraten wird. Es wird empfohlen, dass jeder, der diese Funktionalität sucht , stattdessen die split
Methode String
oder das java.util.regex
Paket verwendet.
Also werfen wir es sofort raus. Das lässt split()
und Scanner
. Was ist der Unterschied zwischen ihnen?
Zum einen wird split()
einfach ein Array zurückgegeben, wodurch die Verwendung einer foreach-Schleife vereinfacht wird:
for (String token : input.split("\\s+") { ... }
Scanner
ist eher wie ein Stream aufgebaut:
while (myScanner.hasNext()) {
String token = myScanner.next();
...
}
oder
while (myScanner.hasNextDouble()) {
double token = myScanner.nextDouble();
...
}
(Es hat eine ziemlich große API , denken Sie also nicht, dass es immer auf so einfache Dinge beschränkt ist.)
Diese Benutzeroberfläche im Stream-Stil kann nützlich sein, um einfache Textdateien oder Konsoleneingaben zu analysieren, wenn Sie nicht alle Eingaben haben (oder nicht erhalten können), bevor Sie mit dem Parsen beginnen.
Persönlich kann ich mich Scanner
nur an Schulprojekte erinnern , bei denen ich Benutzereingaben über die Befehlszeile erhalten musste. Es macht diese Art der Bedienung einfach. Aber wenn ich eine habe String
, die ich aufteilen möchte, ist das fast ein Kinderspiel split()
.