You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何读取文件内容并提取其中的单个单词而非单个字符?

如何读取文件内容并提取其中的单个单词而非单个字符?

看起来你现在的代码是在逐个输出文件里的单个字符,这显然和你想要提取独立单词的需求不匹配对吧?别担心,用Go的标准库就能轻松搞定这个问题,我给你两种实用的解决方案:

方法一:一次性读取文件+用strings.Fields分割单词

这种方法适合文件不大的场景,操作简单直接。我们先把整个文件内容读取出来转成字符串,再用strings.Fields按空白字符分割成单词——这个函数会自动处理连续空格、换行、制表符等各种空白,完美分割出独立的单词。

修改后的代码如下:

package main

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

func main() {
    fileContent, err := os.ReadFile("sample.txt")
    if err != nil {
        fmt.Println("读取文件时出错:", err)
        return // 这里一定要记得处理错误后退出,避免后续无效执行
    }
    // 将字节内容转成字符串,再分割为单词切片
    words := strings.Fields(string(fileContent))
    // 遍历输出每个单词
    for _, word := range words {
        fmt.Println(word)
    }
}

方法二:用bufio.Scanner逐单词读取(适合大文件)

如果你的文件特别大,一次性加载到内存会占用过多资源,那可以用bufio.Scanner来逐单词扫描文件,这样内存占用会低很多。我们只需要把扫描器的分割规则设置为bufio.ScanWords,它就会自动按单词来读取内容。

代码示例:

package main

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

func main() {
    file, err := os.Open("sample.txt")
    if err != nil {
        fmt.Println("打开文件时出错:", err)
        return
    }
    defer file.Close() // 记得用defer确保文件被关闭

    scanner := bufio.NewScanner(file)
    // 设置扫描器按单词分割内容
    scanner.Split(bufio.ScanWords)
    // 循环扫描每个单词
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }
    // 检查扫描过程中是否出现错误
    if err := scanner.Err(); err != nil {
        fmt.Println("扫描文件时出错:", err)
    }
}

额外说明

如果你的“单词”定义比较特殊(比如包含连字符、撇号,或者需要排除附着在单词上的标点符号),那可能需要用regexp包来编写自定义的分割规则,但如果只是普通的空白分隔单词,上面两种方法完全够用啦。

备注:内容来源于stack exchange,提问作者Ashom Azi

火山引擎 最新活动