在java中找到字符串中子串的第n个出现位置?

Tij*_*ese 5 java string substring

我有一个字符串是一个html页面的完整内容,我试图找到第二次出现的索引</table>.有没有人对如何实现这一点有任何建议?

ass*_*ias 7

使用indexOf 概括了@BasVanDenBroek的答案:

public static int nthIndexOf(String source, String sought, int n) {
    int index = source.indexOf(sought);
    if (index == -1) return -1;

    for (int i = 1; i < n; i++) {
        index = source.indexOf(sought, index + 1);
        if (index == -1) return -1;
    }
    return index;
}
Run Code Online (Sandbox Code Playgroud)

快速而肮脏的测试:

public static void main(String[] args) throws InterruptedException {
    System.out.println(nthIndexOf("abc abc abc", "abc", 1));
    System.out.println(nthIndexOf("abc abc abc", "abc", 2));
    System.out.println(nthIndexOf("abcabcabc", "abc", 2));
    System.out.println(nthIndexOf("abcabcabc", "abc", 3));
    System.out.println(nthIndexOf("abc abc abc", "abc", 3));
    System.out.println(nthIndexOf("abc abc defasabc", "abc", 3));
    System.out.println(nthIndexOf("abc abc defasabc", "abc", 4));
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*tta 6

这是一个有趣的镜头;)

public static int findNthIndexOf (String str, String needle, int occurence)
            throws IndexOutOfBoundsException {
    int index = -1;
    Pattern p = Pattern.compile(needle, Pattern.MULTILINE);
    Matcher m = p.matcher(str);
    while(m.find()) {
        if (--occurence == 0) {
            index = m.start();
            break;
        }
    }
    if (index < 0) throw new IndexOutOfBoundsException();
    return index;
}
Run Code Online (Sandbox Code Playgroud)


Al *_*sky 5

找到第N个String的另一个好方法是使用Apache Commons的StringUtils.ordinalIndexOf():

StringUtils.ordinalIndexOf("aabaabaa", "b", 2)  == 5
Run Code Online (Sandbox Code Playgroud)