首頁 >Java >java教程 >如何在 Java 中以數組形式高效檢索所有正規表示式匹配項?

如何在 Java 中以數組形式高效檢索所有正規表示式匹配項?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-28 05:50:21986瀏覽

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

以陣列形式擷取正規表示式符合

在 Java 中,判斷給定模式是否與特定字串相符非常簡單。然而,當處理多個匹配時,將它們收集到一個陣列中可能具有挑戰性。為了解決這個問題,請深入研究本指南,以了解如何有效地利用正規表示式配對。

迭代方法

要將匹配累積到數組中,請結合使用Matcher 和String:

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());
}

此程式碼建立Matcher 物件,該物件系統地尋找輸入字串中的匹配子字串。每個成功的配對都會附加到 allMatches 清單中。最後,使用 allMatches.toArray(new String[0]) 將其轉換為陣列:

String[] matchesArr = allMatches.toArray(new String[0]);

用於 Lazier Matches的自訂可迭代

或者,考慮實現惰性迭代器遍歷並立即消耗匹配項,而無需不必要的操作處理:

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(); }
      };
    }
  };
}

使用如下:

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

以上是如何在 Java 中以數組形式高效檢索所有正規表示式匹配項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn