在Java中查找string中第二次出现的子string

给我们一个string,比如说"itiswhatitis"和一个子string,比如说"is" 。 当string"is"在原始string中第二次出现时,我需要find'i'索引

在这种情况下, String.indexOf("is")将返回2。 在这种情况下,我希望输出是10。

5 Solutions collect form web for “在Java中查找string中第二次出现的子string”

使用indexOf()重载版本,它将开始的indes作为第二个参数:

 str.indexOf("is", str.indexOf("is") + 1); 
 int first = string.indexOf("is"); int second = string.indexOf("is", first + 1); 

这个重载开始寻找来自给定索引的子串。

我正在使用: Apache Commons Lang:StringUtils.ordinalIndexOf()

 StringUtils.ordinalIndexOf("Java Language", "a", 2) 

我认为可以使用循环。

 1 - check if the last index of substring is not the end of the main string. 2 - take a new substring from the last index of the substring to the last index of the main string and check if it contains the search string 3 - repeat the steps in a loop 

你可以编写一个函数来返回出现位置的数组,Java有String.regionMatches函数,非常方便

 public static ArrayList<Integer> occurrencesPos(String str, String substr) { final boolean ignoreCase = true; int substrLength = substr.length(); int strLength = str.length(); ArrayList<Integer> occurrenceArr = new ArrayList<Integer>(); for(int i = 0; i < strLength - substrLength + 1; i++) { if(str.regionMatches(ignoreCase, i, substr, 0, substrLength)) { occurrenceArr.add(i); } } return occurrenceArr; } 
  • 用PHP删除string的前4个字符
  • 使用Java语言的toLowerCase()和toUpperCase()
  • Pythonic的方式插入每个2个元素的string
  • 在C#中,我应该使用string.Empty或String.Empty或“”intitialize一个string?
  • 在Java中使用recursion来反转string
  • 将string分成长度可变的较小的string
  • MySQL查询String包含
  • 更新和replacestring的一部分
  • 删除string中的分隔符之间的文本(使用正则expression式?)
  • 有没有简单的方法,我可以按字母顺序sortingstring中的字符
  • 什么是在C#/ .NET中强制使用CRLF的快速方法?