web-dev-qa-db-ja.com

Java内の文字列内のサブストリングの2番目の出現を見つける

文字列、たとえば"itiswhatitis"とサブ文字列、たとえば"is"が与えられます。文字列'i'が元の文字列で2回目に発生したときに、"is"のインデックスを見つける必要があります。

この場合、String.indexOf("is")は2を返します。この場合、出力を10にしたいです。

55
AmanArora

indexOf() のオーバーロードバージョンを使用します。これは、2番目のパラメーターとして開始インデックス(fromIndex)を受け取ります。

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

このオーバーロードは、指定されたインデックスから部分文字列の検索を開始します。

26
Jeroen Vannevel

私は使用しています: Apache Commons Lang:StringUtils.ordinalIndexOf()

StringUtils.ordinalIndexOf("Java Language", "a", 2)
23
To Kra

ループを使用できると思います。

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
Pravat Panda

発生位置の配列を返す関数を作成できます。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
namnt