如何将字符串转换为符文?
How to convert a string to rune?
这是我的代码片段:
var converter = map[rune]rune {//some data}
sample := "⌘こんにちは"
var tmp string
for _, runeValue := range sample {
fmt.Printf("%+q", runeValue)
tmp = fmt.Sprintf("%+q", runeValue)
}
fmt.Printf("%+q", runeValue)
的输出是:
'\u2318'
'\u3053'
'\u3093'
'\u306b'
'\u3061'
'\u306f'
这些值实际上是符文,但由于 Sprintf
的 return 类型是字符串,我不能在我的 [rune]rune
地图中使用它。
我想知道如何将字符串转换为符文,或者换句话说,我该如何处理这个问题?
一个string
不是单个rune
,它可能包含多个runes
。您可以使用简单类型 conversion 将 string
转换为包含所有符文的 []runes
,例如 []rune(sample)
.
for range
迭代 string
的符文,所以在你的例子中 runeValue
是类型 rune
,你可以在你的 [=27] 中使用它=] 地图,例如:
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]
如果要打印字符,使用fmt.Printf()
的%c
动词:
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.
上试试这个
将字符串转换为符文数组:
runeArray := []rune("пример")
这是我的代码片段:
var converter = map[rune]rune {//some data}
sample := "⌘こんにちは"
var tmp string
for _, runeValue := range sample {
fmt.Printf("%+q", runeValue)
tmp = fmt.Sprintf("%+q", runeValue)
}
fmt.Printf("%+q", runeValue)
的输出是:
'\u2318'
'\u3053'
'\u3093'
'\u306b'
'\u3061'
'\u306f'
这些值实际上是符文,但由于 Sprintf
的 return 类型是字符串,我不能在我的 [rune]rune
地图中使用它。
我想知道如何将字符串转换为符文,或者换句话说,我该如何处理这个问题?
一个string
不是单个rune
,它可能包含多个runes
。您可以使用简单类型 conversion 将 string
转换为包含所有符文的 []runes
,例如 []rune(sample)
.
for range
迭代 string
的符文,所以在你的例子中 runeValue
是类型 rune
,你可以在你的 [=27] 中使用它=] 地图,例如:
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]
如果要打印字符,使用fmt.Printf()
的%c
动词:
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.
上试试这个将字符串转换为符文数组:
runeArray := []rune("пример")