目前Splitter.fixedLength
根据字符拆分字符串。如果拆分器具有可配置的编码(例如 utf-8)用于代码点,那就太好了。
Q
[google/guava]Splitter.fixedLength 支持代码点
6
A
回答
6
注意 Splitter 接收的字符串始终是 UTF-16,而不是具有可变编码的字节数组。不过,根据固定数量的代码点而不是字符进行拆分的选项是有意义的。
1
谢谢,我一直想知道我们是否有更多 API,例如CharMatcher
,使用char
代码点作为单位。
话虽如此:据我所知,即使是代码点也不一定是正确的单位。您是否有任何可以分享的用例详细信息?这将有助于我们确定优先级。(不过,我应该说,这fixedWidth
已经是一个相当小众的实用程序,所以无论如何我们可能都不会解决这个问题。)
3
我从那篇文章中了解到正确的(或尽可能正确的)单位是扩展字素簇,我也了解到 Swift 使用它作为其Character
数据类型。
6
确实,编码可能并不重要,因为 UTF-16 已经适合所有代码点。
但我认为有一个根据代码点进行拆分的用例:
Splitter.fixedLength(1).split("??";)
目前返回['?', '?', '?', '?']
相信通过代码点流畅地解决问题会很有用:
Splitter.fixedLength(1).codePoints().split("??";)
返回["?","?"]
2
如果技术上可行,我强烈主张它基于扩展的字素簇而不是代码点。但除此之外,我同意。:)
8
流畅的 API 是否允许您指定char
、codepoint
或grapheme
?
顺便说一句,我很乐意提供帮助。但我找不到贡献的 README。
9
另外,我会优先考虑代码点,因为它们是 Java 中的一等公民,即String::codePointAt(int)
1
是否存在按代码点进行拆分比按字素簇进行拆分更可取的情况?