[google/guava]Splitter.fixedLength 支持代码点

2024-07-16 488 views
6

目前Splitter.fixedLength根据字符拆分字符串。如果拆分器具有可配置的编码(例如 utf-8)用于代码点,那就太好了。

回答

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 是否允许您指定charcodepointgrapheme

顺便说一句,我很乐意提供帮助。但我找不到贡献的 README。

9

另外,我会优先考虑代码点,因为它们是 Java 中的一等公民,即String::codePointAt(int)

1

是否存在按代码点进行拆分比按字素簇进行拆分更可取的情况?