Maison > développement back-end > C++ > Comment puis-je rechercher efficacement toutes les occurrences d'une sous-chaîne dans une chaîne C# ?

Comment puis-je rechercher efficacement toutes les occurrences d'une sous-chaîne dans une chaîne C# ?

Susan Sarandon
Libérer: 2025-01-01 12:36:10
original
959 Les gens l'ont consulté

How Can I Efficiently Find All Occurrences of a Substring in a C# String?

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);
  }
}
Copier après la connexion

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");
Copier après la connexion

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;
  }
}
Copier après la connexion

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
}
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal