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

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

Susan Sarandon
Libérer: 2024-12-30 01:59:08
original
363 Les gens l'ont consulté

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

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

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

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