以数组形式检索正则表达式匹配
在 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中文网其他相关文章!