在 golang 中切片 unicode/ascii 字符串?
Slice unicode/ascii strings in golang?
我需要在 Go 中对字符串进行切片。可能的值可以包含拉丁字符 and/or Arabic/Chinese 个字符。在以下示例中,阿拉伯字符串字母表的切片注释 [:1]
返回非预期的 value/character.
package main
import "fmt"
func main() {
a := "a"
fmt.Println(a[:1]) // works
b := "ذ"
fmt.Println(b[:1]) // does not work
fmt.Println(b[:2]) // works
fmt.Println(len(a) == len(b)) // false
}
首先,你应该认真阅读 strings, bytes and runes in Go。
这里是你如何实现你想要的:Go playground(我无法正确粘贴阿拉伯符号,但如果中文可以,阿拉伯语应该可以也是)。
s := "abcdefghijklmnop"
fmt.Println(s[2:9])
s = "维基百科:关于中文维基百科"
fmt.Println(string([]rune(s)[2:9]))
输出为:
cdefghi
百科:关于中文
您可以使用 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)
}
我需要在 Go 中对字符串进行切片。可能的值可以包含拉丁字符 and/or Arabic/Chinese 个字符。在以下示例中,阿拉伯字符串字母表的切片注释 [:1]
返回非预期的 value/character.
package main
import "fmt"
func main() {
a := "a"
fmt.Println(a[:1]) // works
b := "ذ"
fmt.Println(b[:1]) // does not work
fmt.Println(b[:2]) // works
fmt.Println(len(a) == len(b)) // false
}
首先,你应该认真阅读 strings, bytes and runes in Go。
这里是你如何实现你想要的:Go playground(我无法正确粘贴阿拉伯符号,但如果中文可以,阿拉伯语应该可以也是)。
s := "abcdefghijklmnop"
fmt.Println(s[2:9])
s = "维基百科:关于中文维基百科"
fmt.Println(string([]rune(s)[2:9]))
输出为:
cdefghi
百科:关于中文
您可以使用 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)
}