string - Go中子字符串的字符位置

标签 string go rune

我如何知道子字符串在字符串中的位置,以字符(或 rune )而不是字节为单位?

strings.Index(s, sub) 将以字节为单位给出位置。使用 Unicode 时,它​​与 rune 中的位置不匹配:http://play.golang.org/p/DnlFjPaD2j

func main() {
    s := "áéíóúÁÉÍÓÚ"
    fmt.Println(strings.Index(s, "ÍÓ"))
}

结果:1​​4。预期:7

当然,我可以将 ssub 转换为 []rune 并手动查找子 slice ,但是有没有更好的方法去做吧?

与此相关,要获取字符串的前 n 个字符,我正在这样做:string([]rune(s)[:n])。这是最好的方法吗?

最佳答案

导入 unicode/utf8 后,您可以这样做包裹:

func main() {
    s := "áéíóúÁÉÍÓÚ"
    i := strings.Index(s, "ÍÓ")
    fmt.Println(utf8.RuneCountInString(s[:i]))
}

http://play.golang.org/p/Etszu3rbY3

关于string - Go中子字符串的字符位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21809653/

相关文章:

java - 比较两个字符串的字符的基本java代码

c# - 获取字符串中某个索引后第一个检测到的空间的索引

string - 正确获取中文字符串的宽度

go - 不能在追加中使用类型 []rune 作为类型 rune

go - 如何区分 typeswitch 中的 rune 和 int32 值?

java - 使用正则表达式为 ArrayList 中的变量赋值

c++ - 使用 sscanf 检索整数

go - 在 GoLang 中将字符串转换为 func 类型

go - 来自 golang : upload fails without properly setting ContentLength 文件的 HTTP PUT 请求正文

arrays - Go:空花括号对数组初始化内存分配的影响