如何计算字符串中字符或子字符串的出现次数?

1038
我想要统计一个字符串中有多少个斜杠(/)。有几种方法可以做到这一点,但我无法决定哪种方法是最好(或最简单)的。
目前我正在使用类似以下的方法:
string source = "/once/upon/a/time/";
int count = source.Length - source.Replace("/", "").Length;

或者对于长度大于1的字符串:
string haystack = "/once/upon/a/time";
string needle = "/";
int needleCount = ( haystack.Length - haystack.Replace(needle,"").Length ) / needle.Length;

42
我必须说这是一种非常不同的计数方式。我对基准测试结果感到惊讶 :) - naveen
5
这并不是很不同寻常... 这是在SQL中实现此功能的典型方式:LEN(ColumnToCheck) - LEN(REPLACE(ColumnToCheck,"N","")) - Sheridan
7
事实上,你应该用 "/" 符号来进行除法运算。"Length"翻译为长度。 - Gerard
4
我可以问一下,您的要求是在"/////"中出现"//"的次数应该是多少呢?是2还是4? - Les
1
使用正则表达式可能是最好的方法。 - Adam Higgins
你说的“挖掘正则表达式”是什么意思?我猜你指的是Linq,因为它可能更加晦涩,而且可能没有任何减少开销的好处,对吗? - barlop
35个回答

1

**计算字符或字符串的数量**

 string st = "asdfasdfasdfsadfasdf/asdfasdfas/dfsdfsdafsdfsd/fsadfasdf/dff";
        int count = 0;
        int location = 0;
       
        while (st.IndexOf("/", location + 1) > 0)
        {
                count++;
                location = st.IndexOf("/", location + 1);
        }
        MessageBox.Show(count.ToString());

0

寻找char的数量与寻找string的数量有很大的不同。而且这还取决于你是否想要检查多个。如果您想要检查各种不同的char计数,可以使用以下内容:

var charCounts =
   haystack
   .GroupBy(c => c)
   .ToDictionary(g => g.Key, g => g.Count());

var needleCount = charCounts.ContainsKey(needle) ? charCounts[needle] : 0;

注意1:将一组元素分组成字典非常有用,这使得编写一个名为GroupToDictionary的扩展方法变得非常合理。
注意2:拥有自己实现的字典,允许设置默认值也是非常有用的,这样你在使用不存在的键时可以自动获得0

0
对于字符串分隔符的情况(不是字符情况,正如主题所述):
string source = "@@@once@@@upon@@@a@@@time@@@";
int count = source.Split(new[] { "@@@" }, StringSplitOptions.RemoveEmptyEntries).Length - 1;

发帖者原始源值的自然分隔符为字符'/',回复中确实解释了source.Split(char[])选项...

0
string s = "HOWLYH THIS ACTUALLY WORKSH WOWH";
int count = 0;
for (int i = 0; i < s.Length; i++)
   if (s[i] == 'H') count++;

它只是检查字符串中的每个字符,如果该字符是您要搜索的字符,则将计数加一。


0
string charters = "aabcbd":
char[] chars = charters.ToCharArray(); List lst = new List();
for(int i=0; i< char.Length; i++)
{
    if(!lst.Contains(char[0]))
    {
        int count = charters.Where(x=> x.value == char[0]).Count;
        lst.Add(char[0]);
        Console.WriteLine($"{char[0]} occures {count} times");
    }
}

输出如下: a 出现了2次 b 出现了2次 c 出现了1次 d 出现了1次

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接