Beginnen wir mit der Beseitigung StringTokenizer. Es wird alt und unterstützt nicht einmal reguläre Ausdrücke. In der Dokumentation heißt es:
StringTokenizerist 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 splitMethode Stringoder das java.util.regexPaket 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 Scannernur 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().