13

我需要在 Go 中分割一个字符串。可能的值可以包含拉丁字符和/或阿拉伯/中文字符。在以下示例中,[:1]阿拉伯字符串字母表的切片注释返回一个非预期的值/字符。

    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
    }

http://play.golang.org/p/R-JxaxbfNL

4

2 回答 2

23

首先,您应该真正了解Go 中的字符串、字节和符文

以下是您如何实现您想要的:(Go playground我无法正确粘贴阿拉伯符号,但如果中文有效,阿拉伯语也应该有效)。

    s := "abcdefghijklmnop" 
    fmt.Println(s[2:9]) 

    s = "维基百科:关于中文维基百科" 
    fmt.Println(string([]rune(s)[2:9]))

输出是:

cdefghi
百科:关于中文
于 2015-07-14T22:41:45.443 回答
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)
}

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

于 2021-01-05T03:29:49.807 回答