字符串中有多少个指定的字符?

时间:2010-10-18 12:15:26

标签: c# .net-3.5 string

将一个字符串示例作为550e8400-e29b-41d4-a716-446655440000,如何计算这些字符串中有多少 -个字符?

我目前正在使用:

int total = "550e8400-e29b-41d4-a716-446655440000".Split('-').Length + 1;

是否有任何方法我们不需要添加1 ...就像使用Count一样?

所有其他方法,例如

Contains IndexOf等仅返回第一个位置和boolean值,没有任何内容返回找到了多少

我错过了什么?

7 个答案:

答案 0 :(得分:17)

您可以使用LINQ方法Enumerable.Count来实现此目的(请注意stringIEnumerable<char>):

int numberOfHyphens = text.Count(c => c == '-');

参数是Func<char, bool>,这是一个谓词,用于指定项目何时被视为“通过”过滤器。

这(松散地说)相当于:

int numberOfHyphens = 0;

foreach (char c in text)
{
    if (c == '-') numberOfHyphens++;
}

答案 1 :(得分:5)

using System.Linq;

..

int total = "550e8400-e29b-41d4-a716-446655440000".Count(c => c == '-');

答案 2 :(得分:4)

int total = "550e8400-e29b-41d4-a716-446655440000".Count(c => c == '-');

答案 3 :(得分:4)

最直接的方法是简单地循环遍历字符,因为这是任何算法必须以某种方式做的事情:

int total = 0;
foreach (char c in theString) {
  if (c == '-') total++;
}

您可以使用扩展方法基本相同:

int total = theString.Count(c => c == '-');

或者:

int total = theString.Aggregate(0, (t,c) => c == '-' ? t + 1 : t)

然后有一些令人感兴趣的(但效率较低)技巧,比如删除字符并比较长度:

int total = theString.Length - theString.Replace("-", String.Empty).Length;

或使用正则表达式查找角色的所有出现:

int total = Regex.Matches(theString, "-").Count;

答案 4 :(得分:2)

int total = "550e8400-e29b-41d4-a716-446655440000".Count(c => c == '-')

答案 5 :(得分:2)

要在字符串中查找“ - ”的数量,您需要遍历字符串并检查每个字符,因此最简单的方法是编写一个执行此操作的函数。使用Split实际上需要更多时间,因为它无缘无故地创建数组。

此外,它让您感到困惑,甚至看起来你错了(你需要减去1)。

答案 6 :(得分:1)

试试这个:

string s = "550e8400-e29b-41d4-a716-446655440000";
int result = s.ToCharArray().Count( c => c == '-');