如何统计字符串在另一字符串中的出现次数?C#代码返回0问题排查
嘿,我来帮你揪出这段代码返回0的问题,顺便给你修正后的方案!
问题分析与修复
你的代码现在完全无法正确统计的核心原因有两个关键错误:
- 遍历逻辑彻底跑偏:你用
foreach(var line in k)遍历字符串k时,line其实是单个char字符(因为字符串本质是char数组)。每个字符转成字符串后长度只有1,根本不可能包含"Bestellung sehen"这种长句子,所以这个判断永远不会成立,计数器i自然一直是0。 - 多余的错误赋值:
i = +i;这行完全没必要,它等价于i = i,对计数没有任何帮助,反而容易混淆逻辑。
修正后的代码
要统计子字符串在目标字符串中的出现次数,我们可以直接操作整个字符串,通过循环查找子串的位置来实现准确计数:
public static int CountSubstringOccurrences(string input, string substring) { int count = 0; int index = 0; // 循环查找子串,直到找不到匹配项为止 while ((index = input.IndexOf(substring, index)) != -1) { count++; // 移动索引到当前匹配位置的下一个字符,避免重复计数同一个位置 index += substring.Length; } return count; }
使用示例
比如你要统计「2018」在那段示例段落里的次数,调用方式如下:
string paragraph = "zaeazeaze2018 azeazeazeazeaze2018azezaaze azeaze4azeaze2018"; int occurrenceCount = CountSubstringOccurrences(paragraph, "2018"); Console.WriteLine(occurrenceCount); // 输出3,和预期一致
原代码的其他小优化点
- 方法名
count不符合C#的命名规范(推荐使用PascalCase),修正后的CountSubstringOccurrences更清晰易懂。 - 原方法返回
string类型,但计数本质是整数,返回int更合理,需要字符串结果的话可以再调用ToString()。
内容的提问来源于stack exchange,提问作者xtool
相关产品推荐
相关产品推荐

