Java中的国际化自动换行

问题描述 投票:1回答:2

我需要对Java进行良好的自动换行处理。不太困难,除了一个皱纹:因为我正在开发一个国际化的应用程序,它需要正确处理中文,日文和韩文文本。在这些语言中,自动换行发生在字符之间,因为字符本身就是单词而且没有空格。不仅如此,由于该文本可能包含使用拉丁字符呈现的外来单词,因此必须特别对待这些单词,而不要像文本的其余部分那样在字符之间进行区分。需要为文本和图形上下文(以字符或像素单位表示的坐标)支持包装。

是否有现成的包可以做到这一点?我还没见过一个。如果没有,有人能告诉我一个处理这种情况的好算法吗?如果需要,代码可以访问与要包装的文本的语言相对应的Locale对象。一个贪婪的算法(每行占用尽可能多的文本)很好。

java internationalization word-wrap textwrapping
2个回答
3
投票

BreakIterator应该帮助将字符序列分解为单词。如果这还不够,我会检查ICU project以查看它是否有更好的东西(某些Java实现来自那里)。图形处理将依赖于您的GUI库,但AWT / Swing Font API支持确定行指标。 (如果你没有'Locale'实例,你可以使用Unicode blocks启发式地做一些事情。)


1
投票

看来ICU4J库可能会满足您的需求。见boundary analysis。给出的示例适用于ICU4C,因此使用的是C / C ++,但也应该使用Java包。

© www.soinside.com 2019 - 2024. All rights reserved.