Das ist wahrscheinlich ein Quicky. Warum gibt dieser Code nichts zurück?
%Vor% hasNext(String pattern)
gibt nur true
zurück, wenn das nächste Token mit dem Muster übereinstimmt. In Ihrem Fall ist "asda"
das nächste Token und das stimmt nicht mit "[A-Z]+"
überein. Die Dokumentation wird dadurch deutlich, dass "[der] Scanner keine Eingabe vornimmt".
Wenn Sie das Muster in "[A-Za-z]+"
ändern, erhalten Sie drei Tokens, die möglicherweise Ihren Vorstellungen entsprechen.
Wenn Sie tatsächlich nur Tokens erhalten möchten, die mit "[A-Z]+"
übereinstimmen, können Sie Folgendes tun:
useDelimiter("[^A-Z]+")
, dann rufen Sie einfach next()
auf
skip("[^A-Z]+")
findInLine("[A-Z]+")
Tipp: Wenn die Leistung entscheidend ist, sollten Sie die vorkompilierten Pattern
Überladungen dieser Methoden verwenden.
Tipp: Bedenke, dass "Xooo ABC"
zwei Übereinstimmungen mit "[A-Z]+"
hat. Wenn dies nicht das ist, was Sie wollen, dann muss die Regex ein bisschen komplizierter sein. Oder du kannst immer einfach nicht passende Token verwerfen.
Wenn Sie alle Wörter drucken möchten, die von Ihrem Begrenzer umgeben sind, sollten Sie sicher sein und das Muster vollständig ausschließen. Auf diese Weise stoßen Sie nicht auf ein Wort, das ein Zeichen enthält, das nicht in Ihrem Muster enthalten ist, was dazu führen würde, dass Ihr Programm diese Schleife beendet (wie es gerade geschieht). Zum Beispiel:
%Vor%Tags und Links java java.util.scanner