Recherche de toutes les positions d'une sous-chaîne dans une chaîne plus grande en C#
Problème :
Étant donné une grande chaîne, vous devez identifier et stocker les positions de toutes les occurrences d'une sous-chaîne spécifiée dans cette chaîne. Par exemple, si la sous-chaîne "extrait" (moi, j'ai beaucoup. de]ponctuation" apparaît au début et au milieu de la plus grande chaîne, les deux instances doivent être localisées et leurs positions d'index ajoutées à une liste, ce qui entraîne un liste contenant 0 et l'index de l'occurrence du milieu.
Solution :
Le code fourni utilise la méthode IndexOf, qui peut être utilisée pour localiser la première occurrence d'une sous-chaîne dans une chaîne. Cependant, cette méthode ne renvoie que la première correspondance. Pour trouver toutes les occurrences, une boucle peut être utilisée pour appeler à plusieurs reprises IndexOf à partir de la position après la correspondance précédente jusqu'à ce qu'aucune autre correspondance ne soit trouvée. les positions d'index peuvent ensuite être ajoutées à la liste souhaitée.
Voici une version corrigée du code fourni :
List<int> inst = new List<int>(); int index = 0; while (index < source.Length) { int src = source.IndexOf("extract\"(me,i-have lots. of]punctuation", index); if (src == -1) break; // No more occurrences found inst.Add(src); index = src + 40; // Advance the search index to beyond the current match }
Alternative Approches :
Une autre solution consiste à utiliser une méthode d'extension pour plus de commodité. Voici un exemple de méthode d'extension qui exploite le modèle d'itérateur :
public static IEnumerable<int> AllIndexesOf(this string str, string value) { if (String.IsNullOrEmpty(value)) throw new ArgumentException("the string to find may not be empty", "value"); for (int index = 0;; index += value.Length) { index = str.IndexOf(value, index); if (index == -1) break; yield return index; } }
En utilisant cette méthode d'extension, vous pouvez facilement. recherchez toutes les occurrences d'une sous-chaîne comme suit :
List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");
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!