105 votes

Trouver la deuxième occurrence d'une sous-chaîne dans une chaîne en Java

Nous avons une chaîne de caractères, disons, "cestcequecest" et une sous-chaîne, disons, "est". Je dois trouver l'index de 'e' lorsque la sous-chaîne "est" se produit une deuxième fois dans la chaîne d'origine.

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

223voto

Rohit Jain Points 90368

Utilisez la 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);

60voto

To Kra Points 1513

Je suis en train d'utiliser : Apache Commons Lang: StringUtils.ordinalIndexOf()

StringUtils.ordinalIndexOf("Langage Java", "a", 2)

38voto

Jeroen Vannevel Points 18676
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é.

1voto

namnt Points 31

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

public static ArrayList occurrencesPos(String str, String substr) {
    final boolean ignoreCase = true;
    int substrLength = substr.length();
    int strLength = str.length();

    ArrayList occurrenceArr = new ArrayList();

    for(int i = 0; i < strLength - substrLength + 1; i++) {
        if(str.regionMatches(ignoreCase, i, substr, 0, substrLength))  {
            occurrenceArr.add(i);
        }
    }
    return occurrenceArr;
}

1voto

Saeed Arianmanesh Points 762

Si vous voulez trouver l'index pour plus de 2 occurrences :

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;
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X