Tij*_*ese 5 java string substring
我有一个字符串是一个html页面的完整内容,我试图找到第二次出现的索引</table>.有没有人对如何实现这一点有任何建议?
使用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)
这是一个有趣的镜头;)
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)
找到第N个String的另一个好方法是使用Apache Commons的StringUtils.ordinalIndexOf():
StringUtils.ordinalIndexOf("aabaabaa", "b", 2) == 5
Run Code Online (Sandbox Code Playgroud)