Heim >Java >javaLernprogramm >Wie kann ich alle Regex-Übereinstimmungen effizient als Array in Java abrufen?
Regex-Übereinstimmungen als Array abrufen
In Java ist es unkompliziert, festzustellen, ob ein bestimmtes Muster mit einer bestimmten Zeichenfolge übereinstimmt. Bei der Verarbeitung mehrerer Übereinstimmungen kann es jedoch schwierig sein, diese in einem Array zusammenzufassen. Um dieses Problem zu beheben, lesen Sie diesen Leitfaden und erfahren Sie, wie Sie Regex-Matches effektiv nutzen können.
Iterativer Ansatz
Um Matches in einem Array zu sammeln, nutzen Sie eine Kombination aus Matcher und Zeichenfolge:
import java.util.regex.Matcher; import java.util.regex.Pattern; ... List<String> allMatches = new ArrayList<>(); Matcher m = Pattern.compile("your regular expression here") .matcher(yourStringHere); while (m.find()) { allMatches.add(m.group()); }
Dieser Code erstellt ein Matcher-Objekt, das systematisch passende Teilzeichenfolgen innerhalb der Eingabezeichenfolge findet. Jeder erfolgreiche Treffer wird an die Liste „allMatches“ angehängt. Konvertieren Sie es schließlich mit allMatches.toArray(new String[0]) in ein Array:
String[] matchesArr = allMatches.toArray(new String[0]);
Custom Iterable for Lazier Matches
Erwägen Sie alternativ die Implementierung von a Lazy-Iterator zum Durchlaufen und sofortigen Konsumieren von Übereinstimmungen ohne unnötige Verarbeitung:
public static Iterable<MatchResult> allMatches( final Pattern p, final CharSequence input) { return new Iterable<MatchResult>() { public Iterator<MatchResult> iterator() { return new Iterator<MatchResult>() { // Internal Matcher final Matcher matcher = p.matcher(input); // Lazy-filled MatchResult MatchResult pending; public boolean hasNext() { if (pending == null && matcher.find()) { pending = matcher.toMatchResult(); } return pending != null; } public MatchResult next() { if (!hasNext()) { throw new NoSuchElementException(); } MatchResult next = pending; pending = null; return next; } public void remove() { throw new UnsupportedOperationException(); } }; } }; }
Verwenden Sie es als folgt:
for (MatchResult match : allMatches( Pattern.compile("[abc]"), "abracadabra")) { System.out.println(match.group() + " at " + match.start()); }
Das obige ist der detaillierte Inhalt vonWie kann ich alle Regex-Übereinstimmungen effizient als Array in Java abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!