Recherche de toutes les positions d'une sous-chaîne dans une chaîne plus grande en C#
Rechercher les occurrences d'une sous-chaîne dans une chaîne plus grande est une tâche de programmation courante. En C#, la méthode string.IndexOf() fournit un moyen pratique de trouver la première occurrence d'une sous-chaîne, mais elle ne fournit pas un moyen simple de trouver toutes les occurrences.
Pour rechercher toutes les occurrences d'une sous-chaîne, vous pouvez utiliser une boucle qui parcourt la chaîne la plus grande tout en utilisant la méthode string.IndexOf() pour localiser chaque occurrence. Cependant, cette approche peut s'avérer inefficace si la chaîne la plus grande est grande et que la sous-chaîne est trouvée plusieurs fois.
Une approche plus efficace consiste à utiliser une méthode d'extension, qui vous permet d'ajouter des méthodes personnalisées aux classes existantes. Voici un exemple de méthode d'extension qui recherche toutes les occurrences d'une sous-chaîne dans une chaîne :
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); } }
Avec cette méthode d'extension, vous pouvez rechercher toutes les occurrences d'une sous-chaîne dans une chaîne en utilisant la syntaxe suivante :
List<int> indexes = "fooStringfooBar".AllIndexesOf("foo");
Vous pouvez également utiliser un itérateur pour rechercher toutes les occurrences d'un substring :
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; } }
Cet itérateur vous permet de parcourir les occurrences de la sous-chaîne à l'aide de l'instruction foreach :
foreach (int index in "fooStringfooBar".AllIndexesOf("foo")) { // do something with the index }
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!