我有一个可行的解决方案,可以迭代字符串并将
rune
映射到映射
package main
import (
"fmt"
)
func main() {
numToString := map[rune]string{
'0': "zero",
'1': "one",
'2': "two",
'3': "three",
'4': "four",
'5': "five",
'6': "six",
'7': "seven",
'8': "eight",
'9': "nine",
}
testStr := "one two 3 four"
newStr := ""
for _, char := range testStr {
if val, ok := numToString[char]; ok {
newStr += val
continue
}
newStr += string(char)
}
// prints one two three four
fmt.Println(string(newStr))
}
这符合我的愿望..但是我很好奇一种更干净的方式(如果可能的话),而不是分配一个全新的字符串来基于原始字符串进行构建。如果我可以在迭代时就地修改原始版本,我会更喜欢。
游乐场这里
使用 strings.Replacer 替换字符串。
var numToString = strings.NewReplacer(
"0", "zero",
"1", "one",
"2", "two",
"3", "three",
"4", "four",
"5", "five",
"6", "six",
"7", "seven",
"8", "eight",
"9", "nine")
func main() {
testStr := "one two 3 four"
newStr := numToString.Replace(testStr)
fmt.Println(newStr)
}