Astring
は単一rune
の ではなく、複数の を含む場合がありますrunes
。単純な型変換を使用しstring
て、を の[]runes
ようなすべてのルーン文字を含むに変換できます[]rune(sample)
。
は aのfor range
ルーンを反復処理するstring
ため、例runeValue
では typeであり、マップでrune
使用できます。たとえば、次のようになります。converter
var converter = map[rune]rune{}
sample := "⌘こんにちは"
for _, runeValue := range sample {
converter[runeValue] = runeValue
}
fmt.Println(converter)
しかし、rune
は のエイリアスであるためint32
、上記のconverter
マップを出力すると整数が出力され、出力は次のようになります。
map[8984:8984 12371:12371 12385:12385 12395:12395 12399:12399 12435:12435]
文字を印刷したい場合は、次の%c
動詞を使用しfmt.Printf()
ます。
fmt.Printf("%c\n", converter)
どちらが出力されますか:
map[⌘:⌘ こ:こ ち:ち に:に は:は ん:ん]
Go Playgroundで例を試してください。
内の特定のルーン文字を置き換える (切り替える) 場合は、次のように関数をstring
使用します。strings.Map()
sample := "⌘こんにちは"
result := strings.Map(func(r rune) rune {
if r == '⌘' {
return 'a'
}
if r == 'こ' {
return 'b'
}
return r
}, sample)
fmt.Println(result)
どの出力(Go Playgroundで試してください):
abんにちは
converter
マップで定義された置換が必要な場合:
var converter = map[rune]rune{
'⌘': 'a',
'こ': 'b',
}
sample := "⌘こんにちは"
result := strings.Map(func(r rune) rune {
if c, ok := converter[r]; ok {
return c
}
return r
}, sample)
fmt.Println(result)
これは同じものを出力します。Go Playgroundでこれを試してみてください。