string - 使用 strings.Builder 将字节安全地写入 UTF-8 字符?
问题描述
我正在尝试做一个练习,我必须反转一些字符串。听说 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ç\u0096¸ä ,olleH"
谢谢。
解决方案
虽然可以 - 并且默认情况下 - 通过索引访问字符串的各个字节,但 Go 字符串也可以转换为代表各个 Unicode 代码点的符文数组。
首先,您需要将字符串转换为 []rune,然后对其进行迭代:
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。
推荐阅读
- windows - 在 MASM 中读取文件
- windows - Ansible 使用 Windows 模块
- sql - 识别 SQL Server 表中的连续块
- matlab - 使用 Matlab 内核的 Jupyter 中更大的内联图
- python - 通过 matlab 运行用 python 编写的子字符串实现抛出 typeError
- ios - *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“试图弹出到不存在的视图控制器。”
- python - 硒脚本不在python中运行
- java - Java - 为什么 jpanel 的大小不起作用
- c# - 在 MVC 的引导框对话框中使用 Kendo Multi Select 下拉菜单时出错
- regex - 使用 perl 或 sed 获取子字符串