Vous pouvez trouver toutes les occurrences et leurs positions avec IndexOf
:
string MyString = "OU=Level3,OU=Level2,OU=Level1,DC=domain,DC=com";
string stringToFind = "OU=";
List positions = new List();
int pos = 0;
while ((pos < MyString.Length) && (pos = MyString.IndexOf(stringToFind, pos)) != -1)
{
positions.Add(pos);
pos += stringToFind.Length();
}
Console.WriteLine("{0} occurrences", positions.Count);
foreach (var p in positions)
{
Console.WriteLine(p);
}
Vous pouvez obtenir le même résultat avec une expression régulière:
var matches = Regex.Matches(MyString, "OU=");
Console.WriteLine("{0} occurrences", matches.Count);
foreach (var m in matches)
{
Console.WriteLine(m.Index);
}
Les principales différences:
- Le code Regex est plus court
- Le code Regex alloue une collection et plusieurs chaînes de caractères.
- Le code IndexOf pourrait être écrit pour afficher la position immédiatement, sans créer de collection.
- Il est probable que le code Regex sera plus rapide en isolation, mais s'il est utilisé de nombreuses fois, le surcoût combiné des allocations de chaînes de caractères pourrait entraîner une charge beaucoup plus élevée sur le collecteur de déchets.
Si j'écrivais ceci en ligne, comme quelque chose qui n'était pas souvent utilisé, je choisirais probablement la solution regex. Si je devais le mettre dans une bibliothèque comme quelque chose à utiliser souvent, je choisirais probablement la solution IndexOf.