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
486 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!

source:php.cn
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