String Go中子字符串的字符位置
我如何知道子字符串在字符串中的位置,用字符(或符文)而不是字节String Go中子字符串的字符位置,string,go,rune,String,Go,Rune,我如何知道子字符串在字符串中的位置,用字符(或符文)而不是字节 字符串。索引(s,sub)将以字节为单位给出位置。使用Unicode时,它与符文中的位置不匹配: 结果:14。预期:7 当然,我可以将s和sub转换为[]符文并手动查找子片,但是有更好的方法吗 与此相关,要获取字符串的第一个n字符,我将执行以下操作:string([]符文[:n])。这是最好的方式吗 导入包后,您可以这样做: 另一个选项: package main import "strings" func r
字符串。索引(s,sub)
将以字节为单位给出位置。使用Unicode时,它与符文中的位置不匹配:
结果:14。预期:7
当然,我可以将s
和sub
转换为[]符文并手动查找子片,但是有更好的方法吗
与此相关,要获取字符串的第一个n
字符,我将执行以下操作:string([]符文[:n])
。这是最好的方式吗 导入包后,您可以这样做:
另一个选项:
package main
import "strings"
func runeIndex(s, substr string) int {
n := strings.Index(s, substr)
if n == -1 { return -1 }
r := []rune(s[:n])
return len(r)
}
func main() {
n := runeIndex("áéíóúÁÉÍÓÚ", "ÍÓ")
println(n == 7)
}
func main() {
s := "áéíóúÁÉÍÓÚ"
i := strings.Index(s, "ÍÓ")
fmt.Println(utf8.RuneCountInString(s[:i]))
}
package main
import "strings"
func runeIndex(s, substr string) int {
n := strings.Index(s, substr)
if n == -1 { return -1 }
r := []rune(s[:n])
return len(r)
}
func main() {
n := runeIndex("áéíóúÁÉÍÓÚ", "ÍÓ")
println(n == 7)
}