我试图计算字符串中有多少匹配模式。我是新手使用java.util.regex,我打算使用matcher.groupCount()来获取匹配组的数量。因为根据文档,它返回捕获组的数量。
返回此匹配器模式中的捕获组数。
组0表示按惯例的整个模式。它不是 包含在此计数中。
任何小于或等于返回值的非负整数 通过这种方法保证是一个有效的组索引 匹配器。
以下是我的问题的简化示例:
Pattern pattern = Pattern.compile("@");
Matcher matcher = pattern.matcher("@#@#@#@#@");
System.out.println(matcher.groupCount());
它的输出是0.我误解了哪一部分?我如何计算匹配模式的数量?
答案 0 :(得分:5)
方法groupCount
返回Pattern
中的组数。
Pattern
中的群组以括号分隔。
您的Pattern
不包含任何群组。
如果您要查找匹配数,请使用while
Matcher
find()
方法{返回boolean
)int myMatches = 0;
while (matcher.find()) {
myMatches++;
}
循环。< / p>
例如:
{{1}}
答案 1 :(得分:2)
您尚未指定任何捕获组。如果你改变你的模式:
Pattern pattern = Pattern.compile("(@)");
然后你会有一个捕获组 - 但它仍然只返回1,因为每个匹配只有一个组。 find()
将返回true
5次。
答案 2 :(得分:1)
您需要在正则表达式中使用paranthesis ()
进行分组。有关详细说明,请参阅this article。
在您的情况下,Pattern pattern = Pattern.compile("@");
将只创建包含整个模式的默认组。因此,您将输出设为0。
请改为尝试:
Pattern pattern = Pattern.compile("(@)");
我试图计算字符串中有多少匹配模式
我认为你想确定字符串中找到的模式数量。不幸的是,分组不用于计算匹配数。
你需要做这样的事情:
int totalMatches = 0;
while(matcher.find()) {
// Number of pattern matches found in the String
totalMatches++;
}