在Java中查找字符串中子字符串的第二次出现


73

我们得到一个字符串,说"itiswhatitis"一个子字符串,说"is"。我需要找到'i'字符串"is"在原始字符串中第二次出现时的索引。

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

Answers:




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

此重载开始从给定索引中查找子字符串。


1
如果发生两次以上怎么办?
Pravat Panda

2
然后没有什么特别的事情发生,它将仍然需要第二次发生。
Jeroen Vannevel 2013年

1
那第三次出现的索引呢?
Pravat Panda

7
那呢 问题是找到第二种情况。
Jeroen Vannevel 2013年

3
@PravatPanda:我想您想知道如何获得第三次发生?然后,您可以继续Jeroen的答案中的代码并添加第三个代码,string.indexOf("is", second + 1);尽管制作返回Nth indexOf的方法可能会更好
Juha Untinen 2014年

1

您可以编写一个函数以返回出现位置的数组,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;
}

0

我认为可以使用循环。

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

0

如果要查找两次以上的索引:

public static int ordinalIndexOf(String fullText,String subText,int pos){

    if(fullText.contains(subText)){
        if(pos <= 1){
            return fullText.indexOf(subText);
        }else{
            --pos;
            return fullText.indexOf(subText, ( ordinalIndexOf(fullText,subText,pos) + 1) );
        }
    }else{
        return -1;
    }

}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.