2022年3月5日星期六

C# 计算某个字符在字符串中出现的次数

C# 计算某个字符在字符串中出现的次数,可以应用于计算关键词密度,判断URL目录的层级深度。

1. 使用可枚举 Enumerable.Count() 方法,引用空间 (System.Linq)

推荐的解决方案是使用System.LinqCount()方法来计算字符串中给定字符的出现次数。该方法如下所示:

using System;
using System.Linq;
 
public class Example
{
    public static void Main()
    {
        string str = "Techie Delight";
        char ch = 'e';
 
        int freq = str.Count(f => (f == ch));
        Console.WriteLine(freq);
    }
}
 
/*
    Output: 3
*/

2. 使用可枚举 Enumerable.Where() 方法,引用空间 (System.Linq)

下面是另一个LINQ解决方案,它使用Where()方法过滤字符串。下面的代码示例显示了如何使用此选项:

using System;
using System.Linq;
 
public class Example
{
    public static void Main()
    {
        string str = "Techie Delight";
        char ch = 'e';
 
        int freq = str.Where(x => (x == ch)).Count();
        Console.WriteLine(freq);
    }
}
 
/*
    Output: 3
*/

3. 使用字符串的 String.Split() 方法

这是使用指定的字符将字符串拆分为数组的String.Split()方法,通过字符串数组的Length属性来确定计数。这个方法示例如下所示:


using System;
 
public class Example
{
    public static void Main()
    {
        string str = "Techie Delight";
        char ch = 'e';
 
        int freq = str.Split(ch).Length - 1;
        Console.WriteLine(freq);
    }
}
 
/*
    Output: 3
*/

4. 使用 foreach 循环

我们也可以为这个简单的任务编写自己的逻辑。其思想是使用foreach循环对字符串中的字符进行迭代,并保持匹配的字符计数。

using System;
 
public class Example
{
    public static void Main()
    {
        string str = "Techie Delight";
        char ch = 'e';
 
        int freq = 0;
        foreach (char c in str)
        {
            if (c == ch) {
                freq++;
            }
        }
 
        Console.WriteLine(freq);
    }
}
 
/*
    Output: 3
*/

5. 使用 Regex.Matches() 方法

正则表达式Regex.Matches()方法用于搜索指定正则表达式的所有匹配项的指定输入字符串。我们可以使用它来计算字符串中字符的出现次数。


using System;
using System.Text.RegularExpressions;
 
public class Example
{
    public static void Main()
    {
        string str = "Techie Delight";
        char ch = 'e';
 
        int freq = Regex.Matches(str, ch.ToString()).Count;
        Console.WriteLine(freq);
    }
}
 
/*
    Output: 3
*/


留下您的评论

评论 (1)

G
游客 | 3 个月前
aaa

asdadsd