我正在尝试做一个我必须扭转一些字符串的练习。我听说Go strings.Builder是目前创建字符串的最快方法,所以我做了以下几点:
func String(toReverse string) string {
var reversedString strings.Builder
for i := len(toReverse) - 1; i >= 0; i-- {
reversedString.WriteByte(toReverse[i])
}
return reversedString.String()
}
问题是这不适用于这样的多字节测试用例:
你好,世界
成为
“\ u008c \u0095¸ä,olleH”
感谢。
答案 0 :(得分:4)
虽然可以 - 并且默认 - 通过索引访问字符串的单个字节,但Go字符串也可以转换为符文数组,这些符文表示各个Unicode代码点。
首先,你需要将你的字符串转换为[]符文,然后迭代:
func String(toReverse string) string {
var reversedString strings.Builder
runes := []rune(toReverse)
for i := len(runes) - 1; i >= 0; i-- {
reversedString.WriteRune(runes[i])
}
return reversedString.String()
}
请参阅https://play.golang.org/p/WYn_MGAGw_x了解即时演示。