Position in characters of a substring in Go
go, rune, string
Solution
You can do it like this, after importing the `unicode/utf8` package:
func main() {
s := "áéíóúÁÉÍÓÚ"
i := strings.Index(s, "ÍÓ")
fmt.Println(utf8.RuneCountInString(s[:i]))
}
http://play.golang.org/p/Etszu3rbY3
Problem
How can I know the position of a substring in a string, in characteres (or runes) instead of bytes? `strings.Index(s, sub)` will give the position in bytes. When using Unicode, it doesn't match the position in runes: http://play.golang.org/p/DnlFjPaD2j ``` func main() { s := "áéíóúÁÉÍÓÚ" fmt.Println(strings.Index(s, "ÍÓ")) } ``` Result: 14. Expected: 7 Of course, I could convert `s` and `sub` to `[]rune` and look for the subslice manually, but is there a better way to do it? Related to this, to get the first `n` characters of a string I'm doing this: `string([]rune(s)[:n])`. Is it the best way?