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
435 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!

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