gpt4 book ai didi

java - 查找子字符串出现的总数

转载 作者:行者123 更新时间:2023-12-04 21:03:59 24 4
gpt4 key购买 nike

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

以 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。我可以修改上面的代码以返回正确的输出吗。

最佳答案

使用 positive lookahead :

"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。

关于java - 查找子字符串出现的总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32816457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com