如何查找字符串对象在java中重复多少次?

时间:2013-04-09 13:19:36

标签: java string object

我必须使用String对象:

String first = "/Some object that has a loop in it object/";
String second = "object";

我需要做的是找到第一个对象重复第二个对象的次数,你能告诉我该怎么做吗?

8 个答案:

答案 0 :(得分:3)

使用此单行在后台使用正则表达式:

String[] parts = first.split(second);

字符串second在字符串first中出现(parts.length - 1)次。就是这样。

修改

为防止在字符串second的情况下可能出现的不需要的结果可能包含特定于正则表达式的字符,您可以在将Pattern.quote(second)传递给split()方法时使用{{1}}作为其中一个评论员建议。

答案 1 :(得分:1)

最简单的方法是在循环中使用indexOf,每次找到单词时都会提升起始索引:

int ind = 0;
int cnt = 0;
while (true) {
    int pos = first.indexOf(second, ind);
    if (pos < 0) break;
    cnt++;
    ind = pos + 1; // Advance by second.length() to avoid self repetitions
}
System.out.println(cnt);

如果单词包含自重复,则会多次找到该单词。请参阅上面的评论,以避免此类“重复”查找。

Demo on ideone

答案 2 :(得分:1)

使用regex,例如:

import java.util.regex.*;

class Test {
    public static void main(String[] args) {
        String hello = "HelloxxxHelloxxxHello"; //String you want to 'examine'
        Pattern pattern = Pattern.compile("Hello"); //Pattern string you want to be matched
        Matcher  matcher = pattern.matcher(hello); 

        int count = 0;
        while (matcher.find())
            count++; //count any matched pattern

        System.out.println(count);    // prints how many pattern matched
    }
}

来源:java regex match count

答案 3 :(得分:0)

使用此:

 String first = "/Some object that has a loop in it object/";
     String second = "object";
     Pattern pattern = Pattern.compile(second);
     Matcher matcher = pattern.matcher(first) ;
     long count = 0;
     while(matcher.find()) {
         count ++;

     }
     System.out.println(count);

答案 4 :(得分:0)

尝试如下...

String str = "/Some object that has a loop in it object/";
String findStr = "object";
int lastIndex = 0;
int count =0;

while(lastIndex != -1){

       lastIndex = str.indexOf(findStr,lastIndex);

       if( lastIndex != -1){
             count ++;
             lastIndex+=findStr.length();
      }
}
System.out.println(count);

答案 5 :(得分:0)

您可以在第二个String上拆分String并计算结果数组的长度,它将有一个元素表示该次数。或者您可以使用PatternMatcher,这是一种更为恰当的方法。

public static void main(String[] args) throws UnsupportedEncodingException, IOException {
    String first = "/Some object that has a loop in it object/";
    String second = "object";

    System.out.println(first.split(Pattern.quote(second)).length - 1);

    final Pattern pattern = Pattern.compile(Pattern.quote(second));
    final Matcher matcher = pattern.matcher(first);
    int count = 0;
    while (matcher.find()) {
        count++;
    }

    System.out.println(count);

}

请勿忘记使用Pattern.quote以防万一。

答案 6 :(得分:0)

我知道这是一个较老的主题,但是我可以使用递归:

// Recursive routine to find the xth repeat of a string
public int atIndex(String searchin, String searchfor, int whichone, int pos) {
    return atIndex(searchin, searchfor, whichone, pos, 0);
}

public int atIndex(String searchin, String searchfor, int whichone, int pos, int recursed) {
    return (whichone>0?atIndex(searchin, searchfor, --whichone, searchin.indexOf(searchfor,pos)+1,++recursed):(recursed==0?-1:pos-1));
}

我是Java的新手,因此可能存在我不知道的速度或资源问题,但是一些测试可以解决任何问题。

要调用它,您可以使用:

    String HL7Test="MSH|^~\\&|EPIC|EPICADT|SMS|SMSADT|199912271408|CHARRIS|ADT^A04|1817457" ;
    System.out.println(atIndex(HL7Test, "|", 4, 0));

希望这有帮助。

答案 7 :(得分:0)

这里您只需要两个变量并在循环条件中进行所有检查。

int pos = 0;
int count= 0;
while (first.indexOf(second, pos) >= 0) {
    count++;
    pos = first.indexOf(second, pos) + 1;
}

System.out.println(count);