字符串中字符的出现次数

本文关键字:字符 字符串 | 更新日期: 2023-09-27 18:32:49

我正在尝试获取以下字符串中某个字符(例如&)的出现次数。

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

如何确定上述测试字符串变量中有 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 == '&');

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

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;

为什么要为此使用正则表达式。 String实现IEnumerable<char>,因此您只需使用 LINQ。

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

字符串示例看起来像 GET 的查询字符串部分。如果是这样,请注意 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;