101 votes

Comment compter le nombre d'occurrences de sous-chaînes dans une chaîne (et non pas le nombre d'occurrences de caractères)

Supposons que j'ai une chaîne de caractères comme:

MyString = "OU=Level3,OU=Level2,OU=Level1,DC=domain,DC=com";

alors je veux savoir combien de fois la sous-chaîne "OU=" apparaît dans cette chaîne. Avec un seul caractère, il y a peut-être quelque chose comme:

int count = MyString.Split("OU=").Length - 1;

mais Split ne fonctionne que pour un char, pas pour une string.

Aussi comment trouver la position des n occurrences? Par exemple, la position du 2ème "OU=" dans la chaîne?

Comment résoudre ce problème?

1voto

DJ KRAZE Points 8546

Voici deux exemples de la façon dont vous pouvez obtenir les résultats que vous recherchez

var MyString = "OU=Level3,OU=Level2,OU=Level1,DC=domain,DC=com";

Celui-ci vous verriez une liste des valeurs séparées mais cela aurait DC juste une idée pour montrer que la séparation avec String fonctionne`

var split = MyString.Split(new string[] { "OU=", "," }, StringSplitOptions.RemoveEmptyEntries);

Celui-ci va séparer et vous renvoyer seulement les 3 éléments dans une liste afin que si vous ne comptez pas dessus vous puissiez valider visuellement qu'il renvoie les 3 niveaux de `OU=``

var lstSplit = MyString.Split(new[] { ',' })
        .Where(splitItem => splitItem.StartsWith(
               "OU=", StringComparison.OrdinalIgnoreCase)).ToList();

1voto

Serge Shultz Points 901
public static int CountOccurences(string needle, string haystack)
{
    return (haystack.Length - haystack.Replace(needle, "").Length) / needle.Length;
}

Comparé à d'autres réponses ici (celle utilisant les expressions régulières et celle utilisant "IndexOf"), cette fonction fonctionne plus rapidement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X