我需要在Go中切一个字符串。有时我有拉丁字符,否则我有阿拉伯语字符,但阿拉伯语的[:1]会返回不同的值。
package main
import "fmt"
func main() {
a := "a"
fmt.Println(a[:1]) // work
b := "ذ"
fmt.Println(b[:1]) // not work
fmt.Println(b[:2]) // work
fmt.Println(len(a) == len(b)) // false
}
答案 0 :(得分:10)
首先,您应该真正了解strings, bytes and runes in Go。
以下是你如何达到你想要的效果: Go playground (我无法正确粘贴阿拉伯符号,但如果中文有效,阿拉伯语也应该有用)。
s := "abcdefghijklmnop"
fmt.Println(s[2:9])
s = "维基百科:关于中文维基百科"
fmt.Println(string([]rune(s)[2:9]))
输出结果为:
cdefghi
百科:关于中文
答案 1 :(得分:0)
您可以使用 utf8string
包:
package main
import "golang.org/x/exp/utf8string"
func main() {
a := utf8string.NewString("?????")
// example 1
r := a.At(1)
// example 2
s := a.Slice(1, 3)
// example 3
n := a.RuneCount()
// print
println(r == '?', s == "??", n == 5)
}