一个字符串包含多少次

时间:2012-12-19 13:30:06

标签: java regex string

  

可能重复:
  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库iike 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);

5 个答案:

答案 0 :(得分:4)

lulz的一个衬垫解决方案

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

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

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

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

答案 1 :(得分:2)

我认为如果您在编辑正则表达式模式的字符串中知道要查找的单词,这可能会有效。

String string = "hellohellohellohellohellohello";
Pattern pattern = Pattern.compile("hello"); 
Matcher matcher = pattern.matcher(string);
int count = 0;
while (matcher.find()) count++;

答案 2 :(得分:1)

Matcher有两个方法“start”和“end”,它们返回上一个匹配的起始索引和结束索引。此外,方法find有一个可选参数“start”,它开始搜索。

答案 3 :(得分:1)

你可以这样做

private int counterString(String s,String search) {
    int times = 0;
    int index = s.indexOf(search,0);
    while(index > 0) {
        index = s.indexOf(search,index+1);
        ++times;
    }
    return times;
 }

答案 4 :(得分:0)

一些快速的Bruce Forte解决方案:

    String someString = "bababab";
    String toLookFor = "bab";
    int count = 0;
    for (int i = 0; i < someString.length(); i++) {
        if (someString.length() - i >= toLookFor.length()) {
            if (someString.substring(i, i + toLookFor.length()).equals(toLookFor) && !"".equals(toLookFor)) {
                count++;
            }
        }
    }
    System.out.println(count);

这打印出来3. 请注意我假设String s都不为空。