Java正则表达式匹配计数

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

假设我有一个文件,并且该文件包含这个文件:

HelloxxxHelloxxxHello

我编译一个模式来寻找'Hello'

Pattern pattern = Pattern.compile("Hello");

然后我使用inputstream来读取文件并将其转换为字符串,以便它可以被正则表达。

一旦匹配器在文件中找到匹配项,就表明这一点,但它不会告诉我它找到了多少匹配项; 只是它在String中找到了一个匹配项。

所以,由于字符串相对较短,我使用的缓冲区是200字节,因此应该找到三个匹配项。然而,它只是说比赛,并没有提供我有多少匹配的计数。

计算字符串中出现的匹配数的最简单方法是什么?我已经尝试过各种for循环,并使用matcher.groupCount(),但我无法快速完成任务。

提问于
用户回答回答于

matcher.find()没有找到所有匹配,只有下一个匹配。

您必须执行以下操作:

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
    }
}
用户回答回答于

这应该适用于不相交的匹配:

public static void main(String[] args) {
    String input = "aaaaaaaa";
    String regex = "aa";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    int from = 0;
    int count = 0;
    while(matcher.find(from)) {
        count++;
        from = matcher.start() + 1;
    }
    System.out.println(count);
}

扫码关注云+社区