我正在做一些事情,我意识到我想计算/我可以在一个字符串中找到多少个 s,然后它让我震惊,有几种方法可以做到这一点,但无法决定最好(或最简单)是什么.
/
目前我正在使用类似的东西:
string source = "/once/upon/a/time/"; int count = source.Length - source.Replace("/", "").Length;
但我一点也不喜欢,有没有人?
我真的不想为此挖掘RegEx,是吗?
RegEx
我知道我的字符串将包含我正在搜索的术语,因此您可以假设…
当然对于 长度 > 1*的字符串 , *
string haystack = "/once/upon/a/time"; string needle = "/"; int needleCount = ( haystack.Length - haystack.Replace(needle,"").Length ) / needle.Length;
如果您使用的是 .NET 3.5,您可以使用 LINQ 在单行中执行此操作:
int count = source.Count(f => f == '/');
如果你不想使用 LINQ,你可以这样做:
int count = source.Split('/').Length - 1;
您可能会惊讶地发现,您的原始技术似乎比这两种方法中的任何一种都快 30%!我刚刚用“/once/on/a/time/”做了一个快速基准测试,结果如下:
您原来的 = 12s source.Count = 19s source.Split = 17s foreach (来自 bobwienholt 的回答)= 10s
(时间是 50,000,000 次迭代,因此您不太可能注意到现实世界中的太大差异。)