linq 字符串中字符的出现次数[重复]

tv6aics1  于 2022-12-28  发布在  其他
关注(0)|答案(6)|浏览(108)

此问题已在此处有答案

How would you count occurrences of a string (actually a char) within a string?(35个回答)
9年前关闭。
我试图得到某个字符的出现次数,例如&在下面的字符串中。

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

字符串
我如何确定在上面的测试字符串变量中有2个&号(&)?

v6ylcynt

v6ylcynt1#

你可以这样做:

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

字符串
使用LINQ:

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

gijlo24d

gijlo24d2#

因为LINQ可以做任何事情……:

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

字符串
或者,如果您愿意,可以使用接受 predicate 的Count重载:

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

erhoui1w

erhoui1w3#

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

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;

gtlvzcf8

gtlvzcf84#

为什么要使用regex String实现了IEnumerable<char>,所以你可以只使用LINQ。

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

字符串

du7egjpx

du7egjpx5#

您的字符串示例看起来像GET的查询字符串部分。如果是这样,请注意HttpContext可以为您提供一些帮助

int numberOfArgs = HttpContext.Current.QueryString.Count;

字符串
有关可以使用QueryString执行的更多操作,请参见NameValueCollection

5gfr0r5j

5gfr0r5j6#

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

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;

字符串

相关问题