Maison > Java > javaDidacticiel > Comment compter correctement les occurrences de sous-chaîne dans une chaîne Java ?

Comment compter correctement les occurrences de sous-chaîne dans une chaîne Java ?

DDD
Libérer: 2025-01-04 15:25:40
original
545 Les gens l'ont consulté

How to Correctly Count Substring Occurrences in a Java String?

Comment trouver le nombre d'occurrences d'une sous-chaîne dans une chaîne

De nombreux développeurs rencontrent des problèmes lorsqu'ils tentent de déterminer la fréquence d'apparition d'une sous-chaîne occurrence dans une chaîne donnée. Un de ces cas implique l'algorithme suivant :

String str = "helloslkhellodjladfjhello";
String findStr = "hello";
int lastIndex = 0;
int count = 0;

while (lastIndex != -1) {
    lastIndex = str.indexOf(findStr, lastIndex);

    if (lastIndex != -1)
        count++;

    lastIndex += findStr.length();
}

System.out.println(count);
Copier après la connexion

Pourquoi l'algorithme échoue-t-il ?

Malgré l'identification réussie de la première occurrence de « bonjour » à l'index 0, le L'algorithme entre dans une boucle sans fin lors de la recherche d'occurrences ultérieures. En effet, une fois la première occurrence trouvée, lastIndex findStr.length() devient égal à 5, mais le prochain résultat "-1" renvoyé par indexOf() provoque une nouvelle itération de la boucle while avec lastIndex toujours défini sur 0.

Comment résoudre le problème ?

Il existe plusieurs façons de résoudre ce problème. La première consiste à utiliser une méthode de recherche de sous-chaîne différente, telle que StringUtils.countMatches() d'Apache Commons Lang. Voici un exemple :

String str = "helloslkhellodjladfjhello";
String findStr = "hello";

System.out.println(StringUtils.countMatches(str, findStr)); // Outputs 3
Copier après la connexion

Vous pouvez également modifier l'algorithme d'origine pour gérer le cas "-1" :

String str = "helloslkhellodjladfjhello";
String findStr = "hello";
int lastIndex = 0;
int count = 0;

while (lastIndex != -1) {
    lastIndex = str.indexOf(findStr, lastIndex);

    if (lastIndex != -1) {
        count++;
        lastIndex += findStr.length();
    } else {
        break; // Exit the loop if no more occurrences are found
    }
}

System.out.println(count); // Outputs 3
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal