92

"itiswhatitis"たとえば、文字列と部分文字列が与えられます"is"。元の文字列で文字列が 2 回出現する'i'ときのインデックスを見つける必要があります。"is"

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

4

8 に答える 8

195

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

str.indexOf("is", str.indexOf("is") + 1);
于 2013-09-26T18:30:40.907 に答える
50

使用しています: Apache Commons ラング: StringUtils.ordinalIndexOf()

StringUtils.ordinalIndexOf("Java Language", "a", 2)
于 2016-02-02T13:37:50.090 に答える
35
int first = string.indexOf("is");
int second = string.indexOf("is", first + 1);

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

于 2013-09-26T18:30:31.450 に答える
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;
}
于 2014-05-18T05:12:01.630 に答える
1

私はパーティーに遅れていないことを願っています.. これが私の答えです. より効率的な正規表現を使用するため、パターン/マッチャーを使用するのが好きです。それでも、この答えは強化できると思います:

    Matcher matcher = Pattern.compile("is").matcher("I think there is a smarter solution, isn't there?");
    int numOfOcurrences = 2;
    for(int i = 0; i < numOfOcurrences; i++) matcher.find();
    System.out.println("Index: " + matcher.start());
于 2021-01-20T18:24:29.177 に答える
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
于 2013-09-26T18:32:51.460 に答える
0

いいパーティーになりそうです...

public static int nthIndexOf(String str, String subStr, int count) {
    int ind = -1;
    while(count > 0) {
        ind = str.indexOf(subStr, ind + 1);
        if(ind == -1) return -1;
        count--;
    }
    return ind;
}
于 2021-05-31T08:48:31.897 に答える