以陣列形式擷取正規表示式符合
在 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中文網其他相關文章!