将一个字符串示例作为550e8400-e29b-41d4-a716-446655440000
,如何计算这些字符串中有多少 -
个字符?
我目前正在使用:
int total = "550e8400-e29b-41d4-a716-446655440000".Split('-').Length + 1;
是否有任何方法我们不需要添加1 ...就像使用Count
一样?
所有其他方法,例如
Contains
IndexOf
等仅返回第一个位置和boolean
值,没有任何内容返回找到了多少。
我错过了什么?
答案 0 :(得分:17)
您可以使用LINQ方法Enumerable.Count
来实现此目的(请注意string
是IEnumerable<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 == '-');