[英]Find total number of occurrences of a substring
假设我想查找以下子字符串的总数。
任何以1开头,后跟任意(0个或多个)数字0,然后是1的子字符串。
我为此编写了一个正则表达式: 1[0]*1
然后,我使用了Java的Pattern
和Matcher
类来完成其余的工作。
import java.util.regex.*;
class P_m
{
public static void main(String []args)
{
int s=0;
Pattern p=Pattern.compile("1[0]*1");
Matcher matcher=p.matcher("1000010101");
while(matcher.find())
++s;
System.out.println(s);
}
}
但是问题是当我们有两个连续的子字符串重叠时,上面的代码输出的答案比实际发生的次数少1。 例如,在上面的代码中输出为2,而应为3。是否可以修改上面的代码以返回正确的输出。
使用积极的前瞻 :
"10*(?=1)"
这与您描述的模式匹配(从1开始,然后是零或多个0,然后是1),但是区别在于匹配中不包含最后一个1。 这样,比赛不会“消耗”最后一个1,并且它可以参与其他比赛,从而有效地实现了您所要求的重叠。
Pattern p = Pattern.compile("10*(?=1)");
Matcher matcher = p.matcher("1000010101");
int s = 0;
while (matcher.find()) ++s;
System.out.println(s);
根据需要输出3。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.