我有一個字符串,它是一個HTML頁面的完整內容,我試圖找到第二次出現的索引</table>
。有沒有人有關於如何實現這一目標的任何建議?在java中找到字符串中第n個子字符串的出現?
5
A
回答
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;
}
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);
這是一些非常基本的代碼順便說一句,你將要建立一些額外的檢查(指數!= -1等) 同樣在你的文章標題中,它表示第n次出現,但在你的文章中你特別提到了第二次出現。如果你確實需要第n次出現,我相信你能從這裏弄清楚。
5
查找字符串的第N次出現另一個好的選擇是使用StringUtils.ordinalIndexOf()從Apache的百科全書:
StringUtils.ordinalIndexOf("aabaabaa", "b", 2) == 5
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));
}
0
上https://stackoverflow.com/a/5678546/15789和https://stackoverflow.com/a/14356988/15789進一步工作(由於原來的海報@ sebastiaan-VAN-DEN-布魯克和@assylias)。
獲取數組中的所有索引。然後你可以得到任何第n個索引。在許多情況下,可能需要多次獲取字符串中第n個子串的索引。獲得一個數組並多次訪問可能會更容易。
public static int[] getIndices(String source, String substr) {
List<Integer> indicesList = null;
int index = source.indexOf(substr);
if (index == -1) {
return new int[0];
} else {
indicesList = new ArrayList<>();
indicesList.add(index);
}
while (index != -1) {
index = source.indexOf(substr, index + 1);
if (index != -1) {
indicesList.add(index);
}
}
// Integer[] iarr = new int[1];
//Autoboxing does not work with arrays. Run loop to convert.
//toArray does not convert Integer[] to int[]
int[] indices = new int[indicesList.size()];
for (int i = 0; i < indicesList.size(); i++) {
indices[i] = indicesList.get(i);
}
return indices;
}
相關問題
- 1. 替換字符串中出現的第n個子字符串
- 2. 在行中找到第n個字符串或子字符串
- 3. 在Java中查找字符串中第二次出現的子字符串
- 4. 如何在python字符串中找到第一次出現的子字符串?
- 5. 如何從n個字符串中找到子字符串
- 6. 在MySQL中查找字符串中子字符串的出現?
- 7. 如何在字符串中找到第n個字符?
- 8. 查找分隔字符串中的第n個字符串
- 9. Perl替換字符串中的第n個子字符串
- 10. 查找在Java中的字符串中出現的所有子字符串
- 11. PHP查找字符串中出現的所有子字符串
- 12. 查找字符串中出現的所有子字符串
- 13. 在字符串中查找第N個字符
- 14. 字符串中子字符串的出現次數(Java)
- 15. 查找字符串中第一次出現子串的位置
- 16. 字符串中的第N個字
- 17. 如何在Java中字符的第N次出現時分割字符串
- 18. Xquery按字符的第N個出現拆分字符串
- 19. Java僅替換字符串中第一次出現的子串
- 20. SAS:如何在字符串中找到第n個字符/字符組的第n個實例?
- 21. 獲取第二個字符/字符串出現的字符串
- 22. 字符串中的第一個找到的數字與jQuery的子字符串
- 23. 在R的長字符串中找到第一個匹配的子字符串
- 24. 如何獲得字符串到第n次出現的字符在PHP中?
- 25. 在SQL Server中截斷字符串中子字符串的第二次出現
- 26. 如何找到字符串中第一次出現的字符串
- 27. 替換/刪除第n個字符串中的子串出現後
- 28. 根據字符串中的第一個字符查找字符串列表中第一次出現的元素
- 29. 在字符串中找到多個子字符串
- 30. 在給定字符第n次出現時分割字符串
@Jon:你怎麼知道這是作業? @Tijo:是嗎?或者你是否正在嘗試在你正在編寫的真實程序中做到這一點。只要你說,家庭作業就沒問題。 – 2011-04-15 14:25:50
我想象它與這些相似;)http://www.google.co.uk/search?q=find+the+nth+occurence+of+a+substring+in+a+string+in+java – 2011-04-15 14:26:38
是在我的問題有任何問題..?我有一個字符串,這是一個hhtml頁面的完整內容..我想知道第二次發生的指數「」我... – 2011-04-15 14:32:03