你如何计算字符串中的字符串(实际上是一个字符)的出现?
我正在做一些事情,我意识到我想要在一个字符串中找到多少/
我可以找到,然后它让我感到震惊,有几种方法可以做到,但无法决定什么是最好的(或最简单的)是。
目前,我正在采取如下方式:
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 / upon / a / time /”做了一个快速的基准测试,结果如下:
你的原稿= 12
source.Count = 19s
source.Split = 17s
foreach(来自bobwienholt的回答)= 10s
(时间是50000次迭代,所以你不可能注意到真实世界中的很多差异。)
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;
链接地址: http://www.djcxy.com/p/37677.html
上一篇: How would you count occurrences of a string (actually a char) within a string?
下一篇: What is the difference between a weak reference and an unowned reference?