如何从golang中的一串符文中获取子串?

Joh*_*ohn 4 unicode go rune

我找到了这个,https://groups.google.com/forum/#!topic/golang-nuts/YyKlLwuWt3w但据我所知,这些解决方案对我不起作用.

如果你使用将字符串视为slice(str[:20])的方法,它会在字符中间断开,我们得到"ال ".

编辑:我相信我可以编写一个函数并以3的倍数执行,因为符文是int32(32位/(8位/字节)).我首先要检查是否有符文.

rig*_*old 18

首先将其转换为符文切片,切片,然后将结果转换回:

string([]rune(str)[:20])
Run Code Online (Sandbox Code Playgroud)

  • 注意,这可能会因恐慌而发生恐慌:运行时错误:如果字符串大小已经小于要剪切的大小,则切片边界超出范围 (2认同)

KAd*_*dot 6

您可以获取UTF-8字符串的子字符串而无需分配额外的内存(您不必将其转换为rune切片):

func substring(s string, start int, end int) string {
    start_str_idx := 0
    i := 0
    for j := range s {
        if i == start {
            start_str_idx = j
        }
        if i == end {
            return s[start_str_idx:j]
        }
        i++
    }
    return s[start_str_idx:]
}

func main() {
    s := "?? Hello"
    fmt.Println(substring(s, 0, 1)) // ?
    fmt.Println(substring(s, 1, 5)) // ? He
    fmt.Println(substring(s, 3, 8)) // Hello
}
Run Code Online (Sandbox Code Playgroud)