全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-690-7320

如何使用Golang实现文本解析工具_统计单词和行数示例

Go轻量文本解析工具应优先用strings.Fields逐行拆分单词,因其自动处理任意空白符且忽略连续空白;基础实现需校验参数、安全打开文件、逐行读取并统计行数与单词数。

如何使用golang实现文本解析工具_统计单词和行数示例

用 Go 语言写一个轻量文本解析工具,统计单词数和行数非常简单,核心在于读取文件、按行分割、再按空格/标点切分单词——关键不是“怎么写”,而是“怎么写得健壮又易读”。

基础版本:逐行读取 + strings.Fields

Go 标准库的 strings.Fields 会自动按任意空白字符(空格、制表符、换行)拆分,并忽略连续空白,比用 strings.Split 更适合单词统计。

示例代码:

package main

import (
    "fmt"
    "io"
    "os"
    "strings"
)

func main() {
    if len(os.Args) != 2 {
        fmt.Println("用法: wordcount <文件路径>")
        return
    }

    file, err := os.Open(os.Args[1])
    if err != nil {
        fmt.Printf("打开文件失败: %v\n", err)
        return
    }
    defer file.Close()

    var lines, words int
    buf := make([]byte, 0, 64*1024)
    
    for {
        n, err := file.Read(buf[:cap(buf)])
        buf = buf[:n]
        if n == 0 {
            if err == io.EOF {
                break
            }
            fmt.Printf("读取错误: %v\n", err)
            return
        }

        // 按行处理(注意:可能有不完整行,但对统计影响小)
        for len(buf) > 0 {
            i := bytes.IndexByte(buf, '\n')
            if i < 0 {
                // 最后一行无换行符
                lines++
                words += len(strings.Fields(string(buf)))
                break
            }
            lines++
            line := string(buf[:i])
            words += len(strings.Fields(line))
            buf = buf[i+1:]
        }
    }

    fmt.Printf("行数: %d, 单词数: %d\n", lines, words)
}

更实用的版本:使用 bufio.Scanner

对大多数文本文件,bufio.Scanner 更简洁安全,自动处理换行、缓冲和大文件。默认每行上限 64KB,如需更大可调 Scanner.Buffer。

立即学习“go语言免费学习笔记(深入)”;

Gaga Gaga

曹越团队开发的AI视频生成工具

Gaga 1151 查看详情 Gaga
  • 按行扫描,每行调 strings.Fields 得单词切片长度
  • 跳过空行(len(strings.Fields(line)) == 0)不影响行数统计,但符合常见语义
  • 不依赖正则,性能好,内存友好

支持简单过滤:忽略标点与大小写

如果想把 "Hello!" 和 "hello" 算作同一个词,或去掉末尾标点,可在切分前预处理:

  • 用 strings.TrimSpace 去首尾空白
  • 用 strings.Map 移除常见标点(如 func(r rune) rune { if unicode.IsPunct(r) || unicode.IsSymbol(r) { return -1 }; return r })
  • 统一转小写:strings.ToLower

注意:这属于“清洗”逻辑,是否启用取决于需求——纯计数不需要,做词频分析时建议加上。

扩展思路:统计 Top N 高频词

只需加一个 map[string]int 记录词频,遍历所有单词时累加,最后用切片排序输出前 N 个。不用第三方库,10 行内可完成。

例如:

freq := make(map[string]int)
for _, w := range strings.Fields(line) {
    w = strings.ToLower(strings.TrimSpace(w))
    if w != "" {
        freq[w]++
    }
}
// 后续转为切片并按 value 排序...

以上就是如何使用Golang实现文本解析工具_统计单词和行数示例的详细内容,更多请关注其它相关文章!


# 不需要  # 杭州网站综合优化  # 有没有优质的网站推广  # 京东保险经纪推广网站  # 开封专业网站优化费用  # 江西视频矩阵营销推广心理咨询  # 大庆seo优化教程必看  # 惠州大企业网站建设  # 8848网站建设  # 济宁谷歌网站优化  # 什么是网站建设托管  # 只需  # 遍历  # word  # 换行  # 可调  # 切分  # 如何使用  # 转换为  # 行数  # 文档  # 标准库  # ai  # 工具  # golang  # go 


相关文章: 如何在Promise链中优雅地中断后续then执行  Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】  如何在 Excel Online 和 Google 表格中更改日期格式  Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  菜鸟取件码是什么怎么查 最全查询渠道汇总  搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  AO3最新入口2025公告_AO3中文官网合集  Lar*el递归关系中排除子孙节点的策略  C++如何跨平台操作文件和目录_C++17标准库std::filesystem的使用教程  Steam官网入口直达 Steam注册及登录步骤  网站内容防复制粘贴的实现策略与局限性  在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配  精准捕获:如何在页面中监听除特定元素外的所有点击事件  b站怎么取消点赞_b站点赞取消操作方法  b站怎么删除评论_b站评论管理与删除操作  使用PHP DOM解析器高效提取HTML中特定标题及其紧邻段落  处理嵌套交互式控件:前端可访问性指南  谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  Flexbox布局实践:实现粘性导航栏与底部固定页脚  漫蛙网页登录入口 漫蛙漫画官方授权网址  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略  知音漫客正版漫画平台_知音漫客官网账号登录  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  Angular响应式表单:实现提交后表单及按钮的禁用与只读化  抖音怎么赚钱_抖音创作者变现方法与途径指南  漫蛙漫画登录站点 漫蛙2正版漫画快速访问  Go语言中JSON数据解析与字段访问教程  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  解决Python单元测试中Mock异常方法调用计数为零的问题  qq游戏手机版下载安装_qq游戏移动端入口  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  mc.js游戏直达 mc.js网页免下载版本秒进地址  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  12306选座怎么选到商务座_12306商务座选择与配置说明  微信商城在哪里打开【步骤】  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  京东单号查询入口_京东快递订单追踪入口  汽水音乐在线解析 汽水音乐在线解析入口  蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。