Java正则表达式匹配计数

假设我有一个文件,该文件包含以下内容:

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

}

}

当计算上述片段aa中aaaa的时,将为你提供2。

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

以上是 Java正则表达式匹配计数 的全部内容, 来源链接: utcz.com/qa/423181.html

回到顶部