java.util.regex.Matcher中的groupCount()始终返回0

时间:2014-04-23 12:32:44

标签: java regex

我试图计算字符串中有多少匹配模式。我是新手使用java.util.regex,我打算使用matcher.groupCount()来获取匹配组的数量。因为根据文档,它返回捕获组的数量。

  

返回此匹配器模式中的捕获组数。

     

组0表示按惯例的整个模式。它不是   包含在此计数中。

     

任何小于或等于返回值的非负整数   通过这种方法保证是一个有效的组索引   匹配器。

以下是我的问题的简化示例:

Pattern pattern = Pattern.compile("@");
Matcher matcher = pattern.matcher("@#@#@#@#@");
System.out.println(matcher.groupCount());

它的输出是0.我误解了哪一部分?我如何计算匹配模式的数量?

3 个答案:

答案 0 :(得分:5)

方法groupCount返回Pattern中的组数。

Pattern中的群组以括号分隔。

您的Pattern不包含任何群组。

如果您要查找匹配数,请使用while Matcher find()方法{返回booleanint 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++;
    }