Подтвердить что ты не робот

Поиск второго вхождения подстроки в строке в Java

Нам задана строка, скажем, "itiswhatitis" и подстрока, скажем, "is". Мне нужно найти индекс 'i', когда строка "is" выполняется второй раз в исходной строке.

String.indexOf("is") вернет 2 в этом случае. Я хочу, чтобы в этом случае на выходе было 10.

4b9b3361

Ответ 1

Используйте перегруженную версию indexOf(), которая принимает начальные индексы как 2-й параметр:

str.indexOf("is", str.indexOf("is") + 1);

Ответ 2

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

Эта перегрузка начинает искать подстроку из данного индекса.

Ответ 4

Я думаю, что цикл можно использовать.

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

Ответ 5

Вы можете написать функцию для возврата массива позиций вхождения, 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;
}