Go语言实现统计字符串中每个字符出现的次数

 更新时间:2025年07月15日 08:52:55   作者:程序员爱钓鱼  
这篇文章主要为大家详细介绍了如何使用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正确遍历字符串每个字符(而不是每个字节)

四、实现需求

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

五、 完整代码实现

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("请输入一段文字:")
	input, _ := reader.ReadString('\n')

	counts := countCharacters(input)

	// 排序输出
	var keys []rune
	for 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将输出结果按字符顺序排序

八、 拓展练习建议

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

九、 常见错误提示

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

小结

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

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

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

到此这篇关于Go语言实现统计字符串中每个字符出现的次数的文章就介绍到这了,更多相关Go统计字符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言实现单端口转发到多个端口

    Go语言实现单端口转发到多个端口

    这篇文章主要为大家详细介绍了Go语言实现单端口转发到多个端口,文中的示例代码讲解详细,具有一定的参考价值,对大家的学习或工作有一定的帮助,需要的小伙伴可以了解下
    2024-02-02
  • 浅谈Golang是如何读取文件内容的(7种)

    浅谈Golang是如何读取文件内容的(7种)

    这篇文章主要介绍了浅谈Golang是如何读取文件内容的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 基于Go语言实现压缩文件处理

    基于Go语言实现压缩文件处理

    在现代的应用开发中,处理压缩文件(如 .zip 格式)是常见的需求,本文将介绍如何使用 Go 语言封装一个 ziputil 包,来处理文件的压缩和解压操作,需要的可以了解下
    2024-11-11
  • Go之interface的具体使用

    Go之interface的具体使用

    这篇文章主要介绍了Go之interface的具体使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Golang基础常识性面试中常见的六大陷阱及应对技巧总结

    Golang基础常识性面试中常见的六大陷阱及应对技巧总结

    Go是一门简单有趣的语言,但与其他语言类似,它会有一些技巧,这篇文章主要给大家介绍了关于Golang基础常识性面试中常见的六大陷阱及应对技巧的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • golang beyla采集trace程序原理源码解析

    golang beyla采集trace程序原理源码解析

    beyla支持通过ebpf,无侵入的、自动采集应用程序的trace信息,本文以golang的nethttp为例,讲述beyla对trace的采集的实现原理,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2024-02-02
  • 基于Golang实现YOLO目标检测算法

    基于Golang实现YOLO目标检测算法

    目标检测是计算机视觉领域的重要任务,它不仅可以识别图像中的物体,还可以标记出物体的位置和边界框,YOLO是一种先进的目标检测算法,以其高精度和实时性而闻名,本文将介绍如何使用Golang实现YOLO目标检测算法,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2023-11-11
  • go for range遍历二维数组的示例

    go for range遍历二维数组的示例

    今天小编就为大家分享一篇关于go for range遍历二维数组的示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • golang实现微信小程序商城后台系统(moshopserver)

    golang实现微信小程序商城后台系统(moshopserver)

    这篇文章主要介绍了golang实现微信小程序商城后台系统(moshopserver),本文通过截图实例代码的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Go语言如何实现将[][]byte转为io.Reader

    Go语言如何实现将[][]byte转为io.Reader

    本文主要介绍了如何在Go语言中实现将[][]byte转换为io.Reader,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2025-02-02

最新评论