繁体   English   中英

查找子字符串出现的总数

[英]Find total number of occurrences of a substring

假设我想查找以下子字符串的总数。

任何以1开头,后跟任意(0个或多个)数字0,然后是1的子字符串。

我为此编写了一个正则表达式: 1[0]*1

然后,我使用了Java的PatternMatcher类来完成其余的工作。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM