web-dev-qa-db-fra.com

Recherche de la deuxième occurrence d’une sous-chaîne dans une chaîne dans Java

On nous donne une chaîne, disons, "itiswhatitis" Et une sous-chaîne, disons, "is". J'ai besoin de trouver l'index de 'i' Lorsque la chaîne "is" Apparaît une seconde fois dans la chaîne d'origine.

String.indexOf("is") retournera 2 dans ce cas. Je veux que la sortie soit 10 dans ce cas.

55
AmanArora

Utilisez une version surchargée de indexOf() , qui prend l'index de départ (fromIndex) comme 2ème paramètre:

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

Cette surcharge commence à rechercher la sous-chaîne à partir de l'index donné.

26
Jeroen Vannevel

J'utilise: Apache Commons Lang: StringUtils.ordinalIndexOf ()

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

je pense qu'une boucle peut être utilisée.

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

Vous pouvez écrire une fonction pour renvoyer un tableau de positions d’occurrence, Java a la fonction String.regionMatches qui est assez pratique

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