Go中如何根据符文而不是字节获取子字符串索引?

use*_*268 1 string unicode substr go

我正在玩 Golang 并发现了这个问题。我可以使用以下代码来获取基于字节的索引:

\n\n
strings.Index("\xe6\x82\xa8\xe5\xa5\xbd\xe4\xbd\xa0\xe5\xa5\xbd", "\xe4\xbd\xa0\xe5\xa5\xbd")\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到的是 6,它是基于字节计数的。

\n\n

如果我们依靠符文(字符),我们应该得到 2,这就是我想要的。我怎样才能得到我想要的东西?

\n\n

谢谢。

\n

syn*_*gma 5

您可以使用utf8.RuneCountInString()方法:

\n\n
import (\n    "fmt"\n    "strings"\n    "unicode/utf8"\n)\n\nfunc main() {\n    input_string := "\xe6\x82\xa8\xe5\xa5\xbd\xe4\xbd\xa0\xe5\xa5\xbd"\n    byte_index := strings.Index(input_string, "\xe4\xbd\xa0\xe5\xa5\xbd")\n    fmt.Println(utf8.RuneCountInString(input_string[:byte_index]))\n}\n
Run Code Online (Sandbox Code Playgroud)\n