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);
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
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
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!