如何在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
相关产品推荐
相关产品推荐

