我有一个字符串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);
答案 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);
这里它匹配每个haha
之前存在的边界。请参阅上面的演示链接。
答案 1 :(得分:3)
你也可以在一行中获得计数:
<bean id="str" class="java.lang.String" factory-method="valueOf">
<constructor-arg value="string_1"/>
</bean>