matcher.find()
找不到所有匹配项,只能找到下一个匹配项。
适用于 Java 9+ 的解决方案
long matches = matcher.results().count();
适用于 Java 8 及更早版本的解决方案
您必须执行以下操作。(从Java 9开始,有一个更好的解决方案)
int count = 0;
while (matcher.find())
count++;
顺便说一句,这是完全不同的东西。matcher.groupCount()
完整示例:
import java.util.regex.*;
class Test {
public static void main(String[] args) {
String hello = "HelloxxxHelloxxxHello";
Pattern pattern = Pattern.compile("Hello");
Matcher matcher = pattern.matcher(hello);
int count = 0;
while (matcher.find())
count++;
System.out.println(count); // prints 3
}
}
处理重叠匹配
当计算上述代码段中的匹配项时,将为您提供2。aa
aaaa
aaaa
aa
aa
要获得 3 个匹配项,即此行为:
aaaa
aa
aa
aa
您必须按如下方式在索引处搜索匹配项:<start of last match> + 1
String hello = "aaaa";
Pattern pattern = Pattern.compile("aa");
Matcher matcher = pattern.matcher(hello);
int count = 0;
int i = 0;
while (matcher.find(i)) {
count++;
i = matcher.start() + 1;
}
System.out.println(count); // prints 3