为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 GO 中将字符串转换为小写?

如何在 GO 中将字符串转换为小写?

Go
aluckdog 2022-11-28 10:30:51
我是 GO 语言的新手,正在做一项作业,我应该编写一个代码来返回文本的词频。但是我知道单词“Hello”、“HELLO”和“hello”都算作“hello”,所以我需要将所有字符串转换为小写。我知道我应该使用 strings.ToLower(),但是我不知道我应该把它包括在课堂上的什么地方。有人可以帮帮我吗?package mainimport (    "fmt"    "io/ioutil"    "log"    "strings"    "time")const DataFile = "loremipsum.txt"// Return the word frequencies of the text argument.func WordCount(text string) map[string]int {    fregs := make(map[string]int)    words := strings.Fields(text)    for _, word := range words {        fregs[word] += 1    }    return fregs}// Benchmark how long it takes to count word frequencies in text numRuns times.//// Return the total time elapsed.func benchmark(text string, numRuns int) int64 {    start := time.Now()    for i := 0; i < numRuns; i++ {        WordCount(text)    }    runtimeMillis := time.Since(start).Nanoseconds() / 1e6    return runtimeMillis}// Print the results of a benchmarkfunc printResults(runtimeMillis int64, numRuns int) {    fmt.Printf("amount of runs: %d\n", numRuns)    fmt.Printf("total time: %d ms\n", runtimeMillis)    average := float64(runtimeMillis) / float64(numRuns)    fmt.Printf("average time/run: %.2f ms\n", average)}func main() {    // read in DataFile as a string called data    data, err:= ioutil.ReadFile("loremipsum.txt")      if err != nil {        log.Fatal(err)        }        // Convert []byte to string and print to screen    text := string(data)    fmt.Println(text)        fmt.Printf("%#v",WordCount(string(data)))    numRuns := 100    runtimeMillis := benchmark(string(data), numRuns)    printResults(runtimeMillis, numRuns)}
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

当您将单词用作地图键时,您应该将它们转换为小写


for _, word := range words {

        fregs[strings.ToLower(word)] += 1

    }


查看完整回答
反对 回复 2022-11-28
?
POPMUISE

TA贡献1765条经验 获得超5个赞

我得到 [a:822 a.:110 我想要所有的 a 都一样。ia如何更改代码以便a和a。是一样的吗?– 你好123


您需要仔细定义一个词。例如,将一串连续的字母和数字转换为小写。


func WordCount(s string) map[string]int {

    wordFunc := func(r rune) bool {

        return !unicode.IsLetter(r) && !unicode.IsNumber(r)

    }

    counts := make(map[string]int)

    for _, word := range strings.FieldsFunc(s, wordFunc) {

        counts[strings.ToLower(word)]++

    }

    return counts

}


查看完整回答
反对 回复 2022-11-28
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

要删除所有非单词字符,您可以使用正则表达式:


package main


import (

    "bufio"

    "fmt"

    "log"

    "regexp"

    "strings"

)


func main() {

    str1 := "This is some text! I want to count each word. Is it cool?"


    re, err := regexp.Compile(`[^\w]`)

    if err != nil {

        log.Fatal(err)

    }

    str1 = re.ReplaceAllString(str1, " ")


    scanner := bufio.NewScanner(strings.NewReader(str1))

    scanner.Split(bufio.ScanWords)

    for scanner.Scan() {

        fmt.Println(strings.ToLower(scanner.Text()))

    }

}


查看完整回答
反对 回复 2022-11-28
  • 3 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信