首页 / C#开发 / 正文

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

354 发布于: 2018-11-22 10:27 读完约需 2 分钟

版权保护声明:本文未经许可,禁止任何形式转载,违者必究。

问题描述

在.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))

版权保护声明:本文未经许可,禁止任何形式转载,违者必究。

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

上一篇: [ASP.NET Core Razor Pages系列教程]ASP.NET Core Razor Pages中的PageModel(09)

下一篇: [.NET/C#].NET/C#应用程序开发的单元测试中如何获取当前程序集所在的目录路径?

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

分享扩散:

发表评论

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