96 votes

Nombre d'occurrences d'un caractère dans une chaîne de caractères

J'essaie d'obtenir le nombre d'occurrences d'un certain caractère tel que & dans la chaîne suivante.

string test = "key1=value1&key2=value2&key3=value3";

Comment puis-je déterminer qu'il y a 2 esperluettes (&) dans la variable de la chaîne de test ci-dessus ?

216voto

Michael Frederick Points 12700

Tu pourrais faire ça :

int count = test.Split('&').Length - 1;

Ou avec LINQ :

test.Count(x => x == '&');

25voto

gdoron Points 61066

Parce que LINQ peut tout faire.. :

string test = "key1=value1&key2=value2&key3=value3";
var count = test.Where(x => x == '&').Count();

Ou, si vous le souhaitez, vous pouvez utiliser le Count qui prend un prédicat :

var count = test.Count(x => x == '&');

12voto

Guffa Points 308133

La solution la plus directe et la plus efficace consiste à parcourir en boucle les caractères de la chaîne :

int cnt = 0;
foreach (char c in test) {
  if (c == '&') cnt++;
}

Vous pouvez utiliser les extensions Linq pour créer une version plus simple et presque aussi efficace. Il y a un peu plus de frais généraux, mais les performances sont étonnamment proches de celles de la boucle :

int cnt = test.Count(c => c == '&');

Ensuite, il y a le vieux Replace Cependant, cette astuce est mieux adaptée aux langages où le bouclage est difficile (SQL) ou lent (VBScript) :

int cnt = test.Length - test.Replace("&", "").Length;

9voto

Brian Rasmussen Points 68853

Pourquoi utiliser les regex pour cela. String met en œuvre IEnumerable<char> donc vous pouvez simplement utiliser LINQ.

test.Count(c => c == '&')

8voto

payo Points 2717

Votre exemple de chaîne de caractères ressemble à la partie chaîne de requête d'un GET. Si c'est le cas, notez que HttpContext a une aide pour vous

int numberOfArgs = HttpContext.Current.QueryString.Count;

Pour en savoir plus sur ce que vous pouvez faire avec QueryString, voir Collection NomValeur

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