关于c#:字符串中字符的出现次数

Number of occurrences of a character in a string

本问题已经有最佳答案,请猛点这里访问。

我试图得到某个字符的出现次数,比如下面的字符串中的&

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

如何确定上述测试字符串变量中有2个和号(&;)。


你可以这样做:

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

或与LINQ:

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


因为LINQ可以做所有的事情……

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

或者,如果愿意,可以使用带谓词的Count重载:

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


最直接和最有效的方法是简单地循环字符串中的字符:

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

您可以使用LINQ扩展来制作一个更简单、更高效的版本。开销有点大,但它仍然令人惊讶地接近性能循环:

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

还有一个老的Replace技巧,但是它更适合于循环很笨拙(sql)或缓慢(vbscript)的语言:

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


为什么要用regex呢?String实现IEnumerable,所以您只需使用linq。

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

字符串示例类似于get的查询字符串部分。如果是这样,请注意httpContext对您有一些帮助

1
int numberOfArgs = HttpContext.Current.QueryString.Count;

有关可以使用querystring执行的操作的更多信息,请参见NameValueCollection。


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

1
2
3
4
5
6
7
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;