我正在做的事情,我意识到我想要计算一个字符串中可以找到多少/
s,然后它让我感到震惊,有几种方法可以做到,但无法决定什么是最好的(或最简单的)是。
目前我正在做的事情如下:
string source = "/once/upon/a/time/";
int count = source.Length - source.Replace("/", "").Length;
但我完全不喜欢它,任何接受者?
我真的不想为此挖出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 /” 做了快速基准测试,结果如下:
你原来 = 12 秒
source.Count = 19s
source.Split = 17s
foreach( 来自 bobwienholt 的回答 )= 10s
(时间是 50,000,000 次迭代,因此您不太可能注意到现实世界中的差异。)
string source = "/once/upon/a/time/";
int count = 0;
foreach (char c in source)
if (c == '/') count++;
必须比source.Replace()
本身更快。
int count = new Regex(Regex.Escape(needle)).Matches(haystack).Count;