java BreakIterator在Android中是如何工作的?
我正在用Android(蒙古语的自定义垂直脚本TextView)制作自己的文本处理器。我想我必须自己找到所有的换行位置,以便实现换行,但后来我发现了^{
我正在努力学习如何使用它。这个documentation比平均水平更有用,但仅仅通过阅读还是很难理解。我还找到了一些教程(参见here、here、和here),但它们缺乏我所寻找的完整的输出解释
我加入这项质询;一个帮助自己学习如何使用BreakIterator
的风格答案
除了Java之外,我还将此作为Android标记,因为它们之间有apparently some difference。另外,Android现在支持ICU ^{
# 1 楼答案
BreakIterator
可用于查找字符、单词、行和句子之间可能的分隔符。这对于在可见字符中移动光标、双击以选择单词、三次单击以选择句子以及换行等操作非常有用样板代码
下面的示例中使用了以下代码。只需调整第一部分即可更改
BreakIterator
的文本和类型如果您只是想测试一下,可以在Android中将其直接粘贴到活动的
onCreate
中。我使用的是System.out.println
而不是Log
,因此它也可以在纯Java环境中进行测试我使用的是
java.text.BreakIterator
,而不是ICU,它只能从API 24获得。有关更多信息,请参阅底部的链接人物
更改样板代码以包括以下内容
输出
最感兴趣的部分是索引
6
、8
和10
。您的浏览器可能正确显示字符,也可能不正确显示字符,但用户会将所有这些字符解释为单个字符,即使它们由多个UTF-16值组成言语
更改样板代码以包括以下内容:
输出
这里有一些有趣的事情需要注意。首先,在空格的两侧检测到分词。第二,尽管有不同的语言,多字汉字仍然被识别。这在我的测试中仍然是正确的,即使我将区域设置设置为
Locale.US
线条
您可以保持代码与单词示例相同:
输出
请注意,打断位置不是整行文字。它们只是换行文本的方便地方
输出类似于示例中的单词。但是,现在它前面的单词包含空格和标点符号。这是有意义的,因为您不希望新行以空格或标点符号开头。还要注意的是,每个汉字都有换行符。这与在汉语中可以将多个字符的单词跨行打断的事实是一致的
判决
更改样板代码以包括以下内容:
输出
在多种语言中识别出正确的分句。此外,电子邮件域中的点没有误报
注释
您可以在创建
BreakIterator
时设置Locale,但如果不设置,则只使用default locale进一步阅读