使用可变长度编码作为内部形式的字符串,如何实现访问某个具体位置的字符?

2021-01-09 00:22:04 +08:00
 usamoi

我在编写一个不可变 String 的轮子,面向处理中文文本较多的环境,希望能减少使用者的心智负担。目前计划使用 UTF-16 作为字符串的内部表示,由于 UTF-16 是变长编码,取得某个位置上的 Unicode Character 这个函数不易实现。单个 Unicode Character 可能占用 1 个 Unicode Code Unit,也可能占用 2 个 Unicode Code Unit,第 k 个 Unicode Code Unit 不一定对应第 k 个 Unicode Character 。

下面是我目前想到的几个解决方案:

这个怎么整啊╮(╯▽╰)╭

706 次点击
所在节点    问与答
4 条回复
msg7086
2021-01-09 00:33:59 +08:00
要自己扛的话可以考虑加索引。
比如每 128 字符记一个下标,这样每次寻址最多只需要检查 127 个字符,和你的#4 类似。
sqrt(n)是一个很不昂贵的操作了,额外的空间和时间基本可以忽略不计。
要便捷性总要有牺牲的。
gyf304
2021-01-09 00:34:26 +08:00
建议不要自己弄。用 ICU
http://site.icu-project.org/home
agagega
2021-01-09 01:18:05 +08:00
可以加速,但概念上 String 和 Bytes 就不是一个东西,String 可以当作一个无法随机访问的东西
lxilu
2021-01-09 01:27:40 +08:00
有 UTF-X Code Unit
没有 Unicode Code Unit

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/743215

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX