我正在做某件事,我意识到我想计算/一个字符串中可以找到多少个,然后让我感到震惊的是,有几种方法可以做到,但是无法确定最好的(或最简单的)是什么。
/
目前,我正在处理类似:
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 / upon / a / time /”做了一个快速基准测试,结果如下:
您的原始= 12s 源.Count = 19s 源。拆分= 17s foreach(根据bobwienholt的回答)= 10s
(时间是进行5000万次迭代,因此您不太可能注意到现实世界中的巨大差异。)