当前位置: 首页 > news >正文

Go语言统计字符串中每个字符出现的次数 — 简易频率分析器

一、 案例目标

本案例将实现一个程序,接收用户输入的一段文字,并统计其中每个字符(包括中文、英文、数字等)出现的次数,并按字符输出。

例如输入:

Hello, 世界!

输出:

H: 1
e: 1
l: 2
o: 1
,: 1: 1
世: 1
界: 1
!: 1

二、 应用场景举例

  • • 文本分析、关键词提取
  • • 字符频率统计(用于密码分析、数据挖掘)
  • • 字符画处理(字符权重)
  • • AI、自然语言处理基础任务之一

三、 涉及知识点讲解

知识点说明
map[rune]intGo 中用于统计频率的典型用法
rune支持 Unicode 字符(中文、表情、特殊符号)
for _, r := range str正确遍历字符串每个字符(而不是每个字节)

四、🛠 实现需求

  1. 1. 用户输入任意一段文字;
  2. 2. 程序逐个字符统计出现次数;
  3. 3. 忽略字节编码问题,支持中文;
  4. 4. 输出格式整齐,便于查看;
  5. 5. 可拓展成图表/词云工具基础。

五、 完整代码实现

package mainimport ("bufio""fmt""os""sort"
)func main() {reader := bufio.NewReader(os.Stdin)fmt.Print("请输入一段文字:")input, _ := reader.ReadString('\n')counts := countCharacters(input)// 排序输出var keys []runefor k := range counts {keys = append(keys, k)}sort.Slice(keys, func(i, j int) bool {return keys[i] < keys[j]})fmt.Println("\n字符统计结果:")for _, r := range keys {fmt.Printf("%q: %d\n", r, counts[r])}
}// 统计字符出现次数
func countCharacters(s string) map[rune]int {result := make(map[rune]int)for _, r := range []rune(s) {result[r]++}return result
}

六、📊 运行示例

示例1:
请输入一段文字:hello, 世界字符统计结果:
'\t': 1
',': 1
'e': 1
'h': 1
'l': 2
'o': 1
'世': 1
'界': 1
'\n': 1

'\n' 和 '\t' 说明:默认输入带有换行符,可根据需要清洗。


七、 核心代码解析

代码段说明
map[rune]int创建一个以字符为键、出现次数为值的映射
[]rune(s)将字符串转为字符切片,避免中文字符拆分错误
sort.Slice将输出结果按字符顺序排序

八、 拓展练习建议

  1. 1. ✅ 排除空格或标点,只统计字母与数字;
  2. 2. ✅ 将结果写入文件保存;
  3. 3. ✅ 改为支持词语统计(用 strings.Fields() 分词);
  4. 4. ✅ 输出词频图或柱状图(结合 github.com/olekukonko/tablewriter 或 ASCII 图表库);

九、 常见错误提示

  • • ❌ 遍历字符串用 []byte:会导致中文字符被拆成多个 byte;
  • • ❌ 统计字符时忘记使用 rune 类型;
  • • ❌ 输出结果不排序,阅读困难。

小结

通过这个案例,你学会了:

  • • 如何遍历字符串中每一个字符(支持中文)
  • • 如何使用 map 来进行频率统计
  • • 如何对统计结果进行排序并美观输出

这是实际项目中非常有价值的一种“文本特征提取”技术,是通往 NLP 和算法世界的一扇小门。

http://www.lryc.cn/news/588881.html

相关文章:

  • 解锁Redis:从安装到配置的全攻略
  • DBeaver 传输数据库A数据到数据库B
  • LLM指纹底层技术——特征提取
  • 06-C语言:第06天笔记
  • python的广东省家庭旅游接待信息管理系统
  • 文心一言4.5开源模型测评:ERNIE-4.5-0.3B超轻量模型部署指南
  • NineData 社区版 V4.3.0 正式发布!新增 5 条迁移对比链路,全面支持 MariaDB、GaussDB 等数据库
  • 使用python的pillow模块将图片转化为灰度图,获取值和修改值
  • Redis Desktop Manager(RDM)下载与安装使用教程
  • STM32小实验二--流水灯
  • 【R语言】警告conversion failure on ‘中文字符‘ in ‘mbcsToSbcs‘: for 注 (U+6CE8)
  • 海狸IM - 一个功能完整的开源即时通讯系统
  • DeepSWE:通过强化学习扩展训练开源编码智能体
  • 2025开放原子开源生态大会 | 开源欧拉的AI原生实践与全球协作
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的用户价值引导与核心用户沉淀策略研究
  • Android target34升级到35中的edge-to-edge适配
  • 【Android】按钮的使用
  • Softhub软件下载站实战开发(十八):软件分类展示
  • 图像修复:深度学习实现老照片划痕修复+老照片上色
  • 三种深度学习模型(LSTM、CNN-LSTM、贝叶斯优化的CNN-LSTM/BO-CNN-LSTM)对北半球光伏数据进行时间序列预测
  • Datawhale AI 夏令营第一期(机器学习方向)Task2 笔记:用户新增预测挑战赛 —— 从业务理解到技术实现
  • 《C++模板高阶机制解析:非类型参数、特化设计与分离编译实践》
  • react的Fiber架构和双向链表区别
  • Redis 数据持久化
  • Cookie全解析:Web开发核心机制
  • Unity Editor下拉框,支持搜索,多层级
  • Expression 类的静态方法
  • 用TensorFlow进行逻辑回归(五)
  • 简单明了的对比PyTorch与TensorFlow
  • VSCode同时支持Vue2和Vue3开发的插件指南