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

如何在C#中使用Substring与for循环统计单词在句子中的出现次数

在C#中用Substring和for循环统计单词出现次数

你提供的代码存在问题:每次只从句子里截取1个字符和目标单词对比,只有当目标单词是单个字符时才会生效,单词长度大于1的话永远匹配不到。下面是修正后的实现思路和代码:

核心思路

  • 先获取输入的句子和要统计的单词
  • 处理边界情况:如果单词为空、长度为0,或者单词长度超过句子长度,直接返回0
  • 循环遍历句子时,终止条件设为 句子长度 - 单词长度 + 1,避免截取子串时超出范围
  • 每次截取和单词长度相同的子串,和目标单词对比(可选择忽略大小写)
  • 匹配成功时计数器加1

修正后的代码

// 获取输入的句子和目标单词
string frase = txEntrada.Text;
string paraula = txEntrada2.Text;
int count = 0;

// 处理边界情况
if (string.IsNullOrEmpty(paraula) || paraula.Length > frase.Length)
{
    txSortida.Text = "0";
    return;
}

int paraulaLength = paraula.Length;
// 循环遍历,注意终止条件
for (int i = 0; i <= frase.Length - paraulaLength; i++)
{
    // 截取和单词长度一致的子串
    string subStr = frase.Substring(i, paraulaLength);
    // 严格匹配大小写,若要忽略大小写可换成 subStr.Equals(paraula, StringComparison.OrdinalIgnoreCase)
    if (subStr == paraula)
    {
        count++;
    }
}

// 输出结果
txSortida.Text = count.ToString();

补充说明

  • 如果需要忽略大小写统计(比如"Hello"和"hello"算同一个单词),把判断条件改成:
    if (subStr.Equals(paraula, StringComparison.OrdinalIgnoreCase))
    
  • 注意:这种方式会统计子串匹配,比如句子里的"helloworld"会被统计包含"hello",如果需要统计独立单词(即单词前后是空格或标点),还需要额外判断单词的前后边界,不过这是更复杂的场景,基础需求用上面的代码即可。

内容的提问来源于stack exchange,提问作者Orifutu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:10:02