Java: Zeichenkette für ein Muster

8

Das ist wahrscheinlich ein Quicky. Warum gibt dieser Code nichts zurück?

%Vor%     
Markos Fragkakis 05.03.2010, 22:50
quelle

3 Antworten

15

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:

  • verwirft einfach nicht passende Token
  • useDelimiter("[^A-Z]+") , dann rufen Sie einfach next() auf
  • benutze skip("[^A-Z]+")
  • benutze 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.

    
polygenelubricants 05.03.2010, 22:57
quelle
0

Ändern

%Vor%

bis

%Vor%     
Chris B. 05.03.2010 22:59
quelle
0

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%     
Dark Castle 05.03.2010 23:20
quelle

Tags und Links