Heim >Java >javaLernprogramm >Wie kann ich alle Regex-Übereinstimmungen effizient als Array in Java abrufen?

Wie kann ich alle Regex-Übereinstimmungen effizient als Array in Java abrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-28 05:50:21987Durchsuche

How to Efficiently Retrieve All Regex Matches as an Array in Java?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn