计算每个组合中的子串出现次数

时间:2015-06-07 09:29:18

标签: java regex

我有一个字符串phahahahoto,我需要找到字符串haha出现在上面字符串中的次数。如果你仔细观察它会出现2次。 我的代码在下面,我得到输出1而不是2.

代码用java编写。

Pattern pattern = Pattern.compile("haha");
Matcher matcher = pattern.matcher("phahahahoto");
int count = 0;
while (matcher.find()) {
    count++;
}
System.out.println(count);

2 个答案:

答案 0 :(得分:4)

按顺序使用前瞻来进行重叠匹配。如果你清楚地注意到字符串haha重叠了。如果您将haha作为正则表达式传递,则不会进行重叠匹配,因为模式haha与第一个haha子字符串匹配,只留下最后一个ha部分。 Lookarounds不会消耗任何单个字符。所以它只能匹配边界。

Pattern pattern = Pattern.compile("(?=haha)");
Matcher matcher = pattern.matcher("phahahahoto");
int count = 0;
while (matcher.find()) {
     count++;
}
System.out.println(count);

DEMO

这里它匹配每个haha之前存在的边界。请参阅上面的演示链接。

答案 1 :(得分:3)

你也可以在一行中获得计数

<bean id="str" class="java.lang.String" factory-method="valueOf">
  <constructor-arg value="string_1"/>
</bean>