你如何计算字符串中的字符串(实际上是一个字符)的出现?

我正在做一些事情,我意识到我想要在一个字符串中找到多少/我可以找到,然后它让我感到震惊,有几种方法可以做到,但无法决定什么是最好的(或最简单的)是。

目前,我正在采取如下方式:

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?