Java: scan string nach einem Muster
Dies ist wahrscheinlich ein quicky. Warum funktioniert dieser code nicht wieder etwas?
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
try {
Scanner sc = new Scanner("asda ASA adad");
String pattern = "[A-Z]+";
while ((sc.hasNext(pattern))) {
System.out.println(sc.next(pattern));
}
sc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
hasNext(String pattern)
gibt nurtrue
wenn das nächste token dem Muster entspricht. In deinem Fall"asda"
ist das nächste token, und das entspricht NICHT"[A-Z]+"
. Die Dokumentation ist klar, dass "[die] scanner nicht Voraus Vergangenheit keine Eingabe".Wenn Sie ändern das Muster zu
"[A-Za-z]+"
, dann würden Sie bekommen drei tokens, die kann was Sie soll.In der Tat, wenn Sie nur wollen, um Gutscheine zu bekommen, das match
"[A-Z]+"
, dann können Sie einen der folgenden Schritte aus:useDelimiter("[^A-Z]+")
, dann einfach aufrufennext()
skip("[^A-Z]+")
findInLine("[A-Z]+")
Tipp: wenn die Leistung kritisch ist, würden Sie wollen, um den vorkompilierten
Pattern
überladungen der einzelnen Methoden.Tipp: Bedenken Sie, dass
"Xooo ABC"
hat zwei"[A-Z]+"
entspricht. Wenn dieses nicht ist, was Sie wollen, dann die regex haben, um ein bisschen mehr kompliziert. Oder können Sie immer einfach verwerfen von nicht passenden Token.Ändern
zu
Wenn Sie schauen, um zu drucken Sie alle Wörter, umgeben von Ihrer delimiter möchten Sie vielleicht, sicher zu sein und ausschließen, das Muster insgesamt. So kommst du nicht über ein Wort, das ein Zeichen enthält, die nicht in Ihr Muster, die dazu führen, dass Ihr Programm beenden, dass die Schleife (so wie es derzeit tun). Zum Beispiel: