java - 一个字符串包含另一个字符串多少次

标签 java regex string

<分区>

Possible Duplicate:
Occurences of substring in a string

在主题中如何检查一个字符串包含另一个字符串的次数? 示例:

s1 "babab"
s2 "bab" 
Result : 2

如果我使用 Matcher,它只会识别第一次出现:

String s1 = JOptionPane.showInputDialog(" ");
String s2 = JOptionPane.showInputDialog(" ");
Pattern p = Pattern.compile(s2);
Matcher m = p.matcher(s1);
int  counter = 0;
while(m.find()){
    System.out.println(m.group());
    counter++;
}
System.out.println(counter);

我可以那样做,但是我想在下面使用 Java 库,例如 Scanner、StringTokenizer、Matcher 等:

String s1 = JOptionPane.showInputDialog(" ");
String s2 = JOptionPane.showInputDialog(" ");
String pom;
int count = 0;
for(int  i = 0 ; i< s1.length() ; i++){
    if(s1.charAt(i) == s2.charAt(0)){
        if(i + s2.length() <= s1.length()){
            pom = s1.substring(i,i+s2.length());
            if(pom.equals(s2)){
                count++;
            }
        }
    }
 }

 System.out.println(count);

最佳答案

lulz 的一个衬里解决方案

longStr 是输入字符串。 findStr 是要搜索的字符串。没有假设,除了 longStrfindStr 必须 null 并且 findStr 必须至少有 1 个字符。

longStr.length() - longStr.replaceAll(Pattern.quote(findStr.substring(0,1)) + "(?=" + Pattern.quote(findStr.substring(1)) + ")", "").length()

由于 2 个匹配项被认为是不同的,只要它们从不同的索引开始,并且可能会发生重叠,我们需要一种方法来区分匹配项并允许匹配的部分重叠。

诀窍是只使用搜索字符串的第一个字符,并使用前瞻性断言搜索字符串的其余部分。这允许重新匹配重叠部分,并且通过删除匹配项的第一个字符,我们可以计算匹配项的数量。

关于java - 一个字符串包含另一个字符串多少次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953485/

相关文章:

Javascript:剪切字符串并在不同的输入中返回

java - 如何通过 spring RestTemplate 更改获取请求中的响应 http header ?

php - 将文本字符串中的任何 url 替换为带有 php 的可点击链接

JavaScript 正则表达式 : Get HTML Tags

string - 将多行字符串转换为单行

string - Node.js 无法解码字符串..字符乱码(问号)

java - 将项目添加到 ArrayAdapter<String>

java - 设置了 Linux Java 程序 X11 DISPLAY 变量,但是

java - 进程不在类型变量 T 的范围内

regex - 如何查找包含 3 组双字母的行(这些组可能包含也可能不包含相同的字母)