我如何知道子字符串在字符串中的位置,以字符(或 rune )而不是字节为单位?
strings.Index(s, sub)
将以字节为单位给出位置。使用 Unicode 时,它与 rune 中的位置不匹配:http://play.golang.org/p/DnlFjPaD2j
func main() {
s := "áéíóúÁÉÍÓÚ"
fmt.Println(strings.Index(s, "ÍÓ"))
}
结果:14。预期:7
当然,我可以将 s
和 sub
转换为 []rune
并手动查找子 slice ,但是有没有更好的方法去做吧?
与此相关,要获取字符串的前 n
个字符,我正在这样做:string([]rune(s)[:n])
。这是最好的方法吗?
最佳答案
导入 unicode/utf8
后,您可以这样做包裹:
func main() {
s := "áéíóúÁÉÍÓÚ"
i := strings.Index(s, "ÍÓ")
fmt.Println(utf8.RuneCountInString(s[:i]))
}
关于string - Go中子字符串的字符位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21809653/