一尘不染

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

c#

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

目前,我正在处理类似:

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;

阅读 313

收藏
2020-05-19

共1个答案

一尘不染

如果您使用的是.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万次迭代,因此您不太可能注意到现实世界中的巨大差异。)

2020-05-19