匹配特定指数

时间:2013-01-16 11:03:20

标签: java regex string pattern-matching match

  

可能重复:
  find the nth occurence of a substring in a string in java?

有没有办法在字符串中获得特定匹配?

如果我们有String test = "this is a long test which is a test of a test";,那么我们是否可以使用Matcher来获取test第二(或任何特定)实例?

我以为我可以使用Matcher.find(x),但这看起来效果不好......

3 个答案:

答案 0 :(得分:3)

尝试

int firstIndex = string.indexOf("test");
if (firstIndex >= 0) {
    int secondIndex = string.indexOf("test", firstIndex+1);
}

另外,如果你想要第n次出现,你可以做一个循环:

int nthIndex = -1;
for (int i=0; i<n; i++ ) {
    nthIndex = string.indexOf("test", nthIndex +1);
    if (nthIndex < 0) {
        break;
    }
}

这将为您提供nthIndex,如果未找到则为-1。

答案 1 :(得分:1)

我认为这个功能可以完成这项工作

int find(String s, String pattern, int occurence) {
    Matcher m = Pattern.compile(pattern).matcher(s);
    for (int i = 1; m.find(); i++) {
        if (i == occurence) {
            return m.start();
        }
    }
    throw new RuntimeException();
}

答案 2 :(得分:0)

您可以使用indexOf方法执行此操作。

    String string;
    int one = string.indexOf(strToBeSearched);     
    int two = string.indexOf(strToBeSearched, one+1);

此外,您应该检查one是否&gt; = 0(如果字符串中不存在strToBeSearchedindexOf将返回-1)