【问题标题】:Writing a toUpper function for unicode letters为 unicode 字母编写一个 toUpper 函数
【发布时间】:2015-05-26 00:08:58
【问题描述】:

从这里http://blog.golang.org/slices(就在容量部分之前)

type path []byte

func (p path) ToUpper() {
    for i, b := range p {
        if 'a' <= b && b <= 'z' {
            p[i] = b + 'A' - 'a'
        }
    }
}

func main() {
    pathName := path("/usr/bin/tso")
    pathName.ToUpper()
    string1 := string(pathName)
    fmt.Printf("%s\n", string1)
}

正在阅读 golang 中的切片和内容。这是一个转换 ascii 字符的函数。您将如何将这个函数也用于处理 unicode?

【问题讨论】:

    标签: string unicode go


    【解决方案1】:

    当你使用 unicode 时,你应该使用rune。 golang中的unicode包有一个toUpper函数。

    package main
    
    import (
        "unicode"
        "fmt"
    )
    
    type path []rune
    
    func (p path) ToUpper() {
        for i, b := range p {
            p[i] = unicode.ToUpper(b)
        }
    }
    
    func main() {
        pathName := path("/usr/bin/tso")
        pathName.ToUpper()
        string1 := string(pathName)
        fmt.Printf("%s\n", string1)
    }
    

    在操场上: example

    【讨论】:

    • 是否支持ßSS等多字符替换?
    • 或者只是使用(或查看源代码)strings.ToUpper。这在您链接到的文档中被列为“高级练习”,因此要求答案就像要求其他人为您做作业一样。 :)
    • @dan04 它在操场上不起作用,所以猜不出来:/
    • @dan04 有关 Unicode 和 Go 的更多信息,请参阅后续博客文章:Text normalization in Go。但简短的回答是 unicode.ToUpper 接受一个符文并返回一个符文,因此它不可能将一个符文转换为多个符文。
    • @aubble,sortof,实际的strings.ToUpper 函数实际上就是func ToUpper(s string) string { return Map(unicode.ToUpper, s) }strings.Map 功能还不错。标准包是寻找学习惯用 Go 的好地方,它做得很好(大多数情况下,角落里有一些杂物)。
    【解决方案2】:

    您可以使用strings.Map 将函数应用于字符串的每个符文,返回映射的字符串。 Playground link to this code:

    package main
    
    import (
        "fmt"
        "strings"
        "unicode"
    )
    
    func main() {
        pathName := strings.Map(unicode.ToUpper, "/usr/bin/tso")
        fmt.Printf("%s\n", pathName)
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2016-05-01
      • 2022-10-02
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多