You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计字符串在另一字符串中的出现次数?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:44:24