为 unicode 字母编写 toUpper 函数

问题描述 投票:0回答:3

从这里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
3个回答
6
投票

使用 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)
}

在操场上: 示例


1
投票

您可以使用

strings.Map
将函数应用于字符串的每个符文,返回映射的字符串。 Playground 链接到此代码:

package main

import (
    "fmt"
    "strings"
    "unicode"
)

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

0
投票

我们可以使用 rune(int32) 来获取 unicode 字符

package main

import (
    "bytes"
    "fmt"
)

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

func main() {
    pathName := path("/usr/bin/tso")
    pathName.ToUpper()
    string1 := string(pathName)
    fmt.Printf("%s\n", string1)
}
© www.soinside.com 2019 - 2024. All rights reserved.