我有一个字符串,它是html页面的完整内容,我正在尝试查找</table>
的第二次出现的索引。有没有人对如何实现这个有任何建议?
答案 0 :(得分:7)
@BasVanDenBroek's answer的推广,使用indexOf:
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;
}
快速而肮脏的测试:
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));
}
答案 1 :(得分: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;
}
答案 2 :(得分:5)
找到第N个字符串的另一个好方法是使用Apache Commons的StringUtils.ordinalIndexOf():
StringUtils.ordinalIndexOf("aabaabaa", "b", 2) == 5
答案 3 :(得分:4)
首先找到第一个索引,然后查找从第一个索引+1开始搜索的第二个索引
String string = "first</table>second</table>";
int firstIndex = string.indexOf("</table>");
int secondIndex = string.indexOf("</table>", firstIndex+1);
System.out.println("second index: " + secondIndex);
这是一些非常基本的代码btw,你会想要构建一些额外的检查(索引!= -1等) 同样在你的帖子标题中它说nth出现,但在你的帖子中你提到了第二次出现。如果你真的需要第n次出现,我相信你能从这里弄明白。
答案 4 :(得分:0)
继续https://stackoverflow.com/a/5678546/15789和https://stackoverflow.com/a/14356988/15789(感谢原创海报@ sebastiaan-van-den-broek和@assylias)。
获取数组中的所有索引。然后你可以获得任何第n个索引。在许多情况下,可能需要多次获取字符串中子字符串的第n个索引。获取一次数组并多次访问它可能会更容易。
UserPreference