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
Freigeben: 2024-11-28 05:50:21
Original
1065 Leute haben es durchsucht

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());
}
Nach dem Login kopieren

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]);
Nach dem Login kopieren

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(); }
      };
    }
  };
}
Nach dem Login kopieren

Verwenden Sie es als folgt:

for (MatchResult match : allMatches(
    Pattern.compile("[abc]"), "abracadabra")) {
  System.out.println(match.group() + " at " + match.start());
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage