Recherche de toutes les positions de sous-chaînes dans une chaîne plus grande en C#
Lorsque vous travaillez avec de grandes chaînes, la localisation de toutes les instances d'une sous-chaîne spécifique peut être cruciale pour l'analyse et l'analyse des données. Cet article aborde le défi consistant à trouver toutes ces instances et à stocker leurs index dans une liste.
Énoncé du problème
Vous disposez d'une grande chaîne que vous devez analyser. Dans cette chaîne, vous devez identifier et stocker les positions de chaque occurrence d'une sous-chaîne spécifique. Supposons que l'exemple de chaîne soit "extrait" (moi, j'ai beaucoup de] ponctuation. " Vous souhaitez rechercher toutes les occurrences de cette sous-chaîne dans la chaîne plus grande et ajouter leurs index à une liste.
Résolution
Méthode 1 :
La méthode IndexOf en C# peut être utilisée pour localiser la première occurrence de une sous-chaîne. Cependant, pour trouver toutes les occurrences, nous devons utiliser une boucle pour parcourir la chaîne et continuer la recherche jusqu'à ce qu'aucune autre instance ne soit trouvée.
Cette technique peut être améliorée en utilisant une méthode d'extension pour créer la sous-chaîne. code plus concis. Voici un exemple de méthode d'extension :
public static List<int> AllIndexesOf(this string str, string value) { if (String.IsNullOrEmpty(value)) throw new ArgumentException("the string to find may not be empty", "value"); List<int> indexes = new List<int>(); for (int index = 0;; index += value.Length) { index = str.IndexOf(value, index); if (index == -1) return indexes; indexes.Add(index); } }
Méthode 2 :
Alternativement, un itérateur peut également être utilisé. pour générer les index de manière séquentielle :
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; } }
Ces deux méthodes peuvent être facilement ajoutées à n'importe quel objet chaîne, ce qui facilite la recherche de toutes les positions de sous-chaîne. Par exemple, la ligne suivante trouverait toutes les occurrences de la sous-chaîne "foo. " dans la chaîne "fooStringfooBar":
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!