string中出现的字符数

我正在试图获取某个字符的出现次数,如下面的string中的&

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

如何确定上述testingstringvariables中有2个&符号(&)?

你可以这样做:

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

或者与LINQ:

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

因为LINQ可以做一切…:

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

或者如果你喜欢的话,你可以使用带有谓词的Count重载:

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

最直接,最有效的方法是简单地遍历string中的字符:

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

您可以使用Linq扩展来制作更简单,几乎同样有效的版本。 有一些开销,但它仍然令人惊讶地接近性能循环:

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

然后是旧的Replace技巧,但是更适合循环尴尬(SQL)或慢速(VBScript)的语言:

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

为什么使用正则expression式。 String实现IEnumerable<char> ,所以你可以使用LINQ。

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

您的string示例看起来像GET的查询string部分。 如果是这样,请注意HttpContext对你有一些帮助

 int numberOfArgs = HttpContext.Current.QueryString.Count; 

有关使用QueryString的更多信息,请参见NameValueCollection

这是所有答案中计数最低效的方法。 但是你会得到一个包含键值对的字典作为奖励。

 string test = "key1=value1&key2=value2&key3=value3"; var keyValues = Regex.Matches(test, @"([\w\d]+)=([\w\d]+)[&$]*") .Cast<Match>() .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value); var count = keyValues.Count - 1;