2

我必须字符串对象:

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

我需要做的是找出第二个对象在第一个对象中重复了多少次,你能告诉我怎么做吗?

4

8 回答 8

3

使用在后台使用正则表达式的这一行:

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

String在 String 中second出现(parts.length - 1)first。就这样。

编辑:

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

于 2013-04-09T13:23:59.467 回答
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);

如果一个单词包含自我重复,这将多次找到该单词。请参阅上面的评论以避免此类“重复”发现。

ideone 上的演示

于 2013-04-09T13:22:05.577 回答
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正则表达式匹配计数

于 2013-04-09T13:24:31.547 回答
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);
于 2013-04-09T13:22:37.423 回答
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);
于 2013-04-09T13:23:02.963 回答
0

您可以拆分String第二个String并计算结果数组的长度,它将多一个元素,即出现次数。或者您可以使用Patternand Matcher,这是一种更合适的方法。

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以防万一。

于 2013-04-09T13:24:16.563 回答
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));

希望这可以帮助。

于 2014-09-16T15:02:57.157 回答
0

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

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

System.out.println(count);
于 2021-06-20T19:06:06.580 回答