将字符串索引为字符

时间:2012-10-29 10:36:29

标签: string unicode go

  

字符串的元素具有字节类型,可以使用   通常的索引操作。

如何将字符串元素作为char?

  

“some”[1] - > “○”

3 个答案:

答案 0 :(得分:10)

最简单的解决方案是将其转换为符文数组:

var runes = []rune("someString")

请注意,在迭代字符串时,您不需要转换。请参阅Effective Go中的此示例:

for pos, char := range "日本語" {
    fmt.Printf("character %c starts at byte position %d\n", char, pos)
}

打印

character 日 starts at byte position 0
character 本 starts at byte position 3
character 語 starts at byte position 6

答案 1 :(得分:4)

Go字符串通常但不一定是UTF-8编码的。在它们是Unicode字符串的情况下,术语“char [acter]”非常复杂,并且没有符文(代码点)和Unicode字符的通用/唯一双射。

无论如何,人们可以轻松处理切片中的代码点(符文)并使用转换将索引用于其中:

package main

import "fmt"

func main() {
        utf8 := "Hello, 世界"
        runes := []rune(utf8)
        fmt.Printf("utf8:% 02x\nrunes: %#v\n", []byte(utf8), runes)
}

此处:http://play.golang.org/p/qWVSA-n93o

注意:索引访问Unicode“字符”的愿望通常是设计错误。大多数文本数据都是按顺序处理的。

答案 2 :(得分:0)

另一个选项是包 utf8string

package main
import "golang.org/x/exp/utf8string"

func main() {
   s := utf8string.NewString("?????")
   t := s.At(2)
   println(t == '?')
}

https://pkg.go.dev/golang.org/x/exp/utf8string