10

https://groups.google.com/forum/#!topic/golang-nuts/YyKlLwuWt3wを​​見つけましたが、私が知る限り、解決策はうまくいきませんでした。

文字列を slice( ) として扱う方法を使用すると、文字str[:20]の途中で途切れてしまい、"ال�" となります。

編集:ルーンはint32(32ビット/(8ビット/バイト))であるため、関数を記述して3の倍数として実行できると思います。まず、ルーンがあるかどうかを確認する必要があります。

4

4 に答える 4

11

rune追加のメモリを割り当てることなく、UTF-8 文字列の部分文字列を取得できます (スライスに変換する必要はありません)。

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
}
于 2016-07-23T03:12:48.093 に答える