88

私はこれをしたかった:

for i := 0; i < len(str); i++ {
    dosomethingwithrune(str[i]) // takes a rune
}

しかし、str[i]の型は ではなくbyte( ) であることがわかりました。uint8rune

バイトではなくルーンで文字列を反復処理するにはどうすればよいですか?

4

3 に答える 3

135

この例は、Effective Goから参照してください。

for pos, char := range "日本語" {
    fmt.Printf("character %c starts at byte position %d\n", char, pos)
}

これは次を出力します:

character 日 starts at byte position 0
character 本 starts at byte position 3
character 語 starts at byte position 6

文字列の場合、UTF-8 を解析することで個々の Unicode コード ポイントを分割することで、範囲がより多くの作業を行います。

于 2013-08-08T16:09:12.700 に答える
19

例えば:

package main

import "fmt"

func main() {
        for i, rune := range "Hello, 世界" {
                fmt.Printf("%d: %c\n", i, rune)
        }
}

遊び場


出力:

0: H
1: e
2: l
3: l
4: o
5: ,
6:  
7: 世
10: 界
于 2013-08-08T16:11:51.867 に答える