6

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

如何将字符串元素获取为 char ?

“一些”[1] -> “o”

4

3 回答 3

10

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

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
于 2012-10-29T10:54:42.013 回答
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“字符”是一个设计错误。大多数文本数据是按顺序处理的。

于 2012-10-29T10:55:53.380 回答
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

于 2021-05-19T21:51:31.087 回答