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;