首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字符串转换为符文?

如何将字符串转换为符文?
EN

Stack Overflow用户
提问于 2020-12-08 17:00:46
回答 1查看 3.7K关注 0票数 1

下面是我的代码片段:

代码语言:javascript
复制
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)的输出为:

代码语言:javascript
复制
'\u2318'
'\u3053'
'\u3093'
'\u306b'
'\u3061'
'\u306f'

这些值从字面上看是符文,但是因为Sprintf的返回类型是string,所以我不能在我的[rune]rune映射中使用它。我想知道如何将字符串转换为符文,或者换句话说,我如何处理这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-08 17:21:07

string不是单个rune,它可以包含多个runes。您可以使用简单类型conversionstring转换为包含其所有符文的[]runes,如[]rune(sample)

for range遍历string的符文,因此在您的示例中,runeValue的类型为rune,您可以在converter映射中使用它,例如:

代码语言:javascript
复制
var converter = map[rune]rune{}
sample := "⌘こんにちは"
for _, runeValue := range sample {
    converter[runeValue] = runeValue
}
fmt.Println(converter)

但由于runeint32的别名,因此打印上面的converter映射将打印整数,输出将是:

代码语言:javascript
复制
map[8984:8984 12371:12371 12385:12385 12395:12395 12399:12399 12435:12435]

如果要打印字符,请使用fmt.Printf()%c动词

代码语言:javascript
复制
fmt.Printf("%c\n", converter)

它将输出:

代码语言:javascript
复制
map[⌘:⌘ こ:こ ち:ち に:に は:は ん:ん]

Go Playground上尝试这些示例。

如果要替换(切换) string中的某些符文,请使用strings.Map()函数,例如:

代码语言:javascript
复制
sample := "⌘こんにちは"

result := strings.Map(func(r rune) rune {
    if r == '⌘' {
        return 'a'
    }
    if r == 'こ' {
        return 'b'
    }
    return r
}, sample)

fmt.Println(result)

以下输出(在Go Playground上试用):

代码语言:javascript
复制
abんにちは

如果您想要由converter映射定义的替换:

代码语言:javascript
复制
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上试试这个。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65195938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档