[.NET/C#].NET/C#应用程序开发中如何从一个字符串中找出字符出现的次数,哪种方式更高效?

C#开发 作者: Rector 94 次阅读 · 读完约需 1 分钟 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在.NET/C#的应用程序开发中,需要从字符串中找出某个字符出现的次数,如下字符串:

string source = "/once/upon/a/time/";

现要找出source字符串中斜线/出现的次数,应该如何处理,有哪些方式可以实现,哪种更高效呢?

方案一

使用字符串的IndexOf()方法,如下:

string source = "/once/upon/a/time/";
int count = 0;
int n = 0;

while ((n = source.IndexOf('/', n)) != -1)
{
   n++;
   count++;
}

或者,将字符串转换成字符数组,然后使用foreach循环字符数组中的每个字符,如下:

char[] testchars = source.ToCharArray();
foreach (char c in testchars)
{
     if (c == '/')
         count++;
}

或者,将字符串转换成字符数组,然后使用for循环字符数组中的每个字符,如下:

char[] testchars = source.ToCharArray();
int length = testchars.Length;
for (int n = 0; n < length; n++)
{
    if (testchars[n] == '/')
        count++;
}

如果从字符数组的末尾向开始进行循环遍历,则执行效率会更高,如下:

int length = testchars.Length;
for (int n = length-1; n >= 0; n--)
{
    if (testchars[n] == '/')
        count++;
}

此方案中的只种实现均比以下几个方案的实现更高效。

方案二

如果是.NET 3.5及以上版本,可以使用LINQ快速实现,如下:

int count = source.Count(f => f == '/');

或者,如果不想使用LINQ,那么还可以使用字符串的Split()方法,如下:

int count = source.Split('/').Length - 1;

方案三

使用正则表达式实现,如下:

int count = new Regex(Regex.Escape(needle)).Matches(haystack).Count;

方案四

如果需要实现不仅可以查找单个字符,还可以查找一个子字符串,则可以使用如下方式:

int count = src.Select((c, i) => src.Substring(i)).Count(sub => sub.StartsWith(target))

阅读了该文章的人还浏览了...

本文永久链接码友网 » [.NET/C#].NET/C#应用程序开发中如何从一个字符串中找出字符出现的次数,哪种方式更高效?

发布于: 2018-11-22 10:27:38
分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册