标签: breakiterator

字素簇中的最大代码点数量

我正在使用 C++ ICU 库。我希望将 utf-8 字符串分割成大致相等的块。但是,我希望在字素簇边界处划分块。我不希望将整个字符串转换为 utf-16 来实现内存和速度效率。相反,我想将少量接近我估计的块边界的 utf-8 代码点转换为 utf-16。然后我可以使用 ICU 的BreakIterator来计算出确切的边界。

组成字素簇的码点数量是否有硬性上限?如果是这样,那是什么?我需要知道这一点才能确定从 utf-8 转换为 utf-16 所需的最小代码点。

c++ utf icu breakiterator grapheme-cluster

6
推荐指数
1
解决办法
1259
查看次数

BreakIterator如何在Android中运行?

我正在Android中创建自己的文本处理器(一个自定义垂直脚本TextView for Mongolian).我想我必须自己找到所有的断线位置,以便我可以实现换行,但后来我发现了BreakIterator.这似乎找到了各种语言中的字符,单词,行和句子之间的所有可能的中断.

我正在努力学习如何使用它.该文件是超过平均水平有帮助,但它仍然难以从只是阅读理解.我还找到了一些教程(见这里,这里这里),但他们缺乏我正在寻找的输出的完整解释.

我正在添加这个Q&A风格的答案,以帮助自己学习如何使用BreakIterator.

除了Java之外,我正在制作这个Android标签,因为它们之间显然存在一些差异.此外,Android现在支持ICUBreakIterator,未来的答案可能会解决这个问题.

java android word-wrap breakiterator

5
推荐指数
1
解决办法
1394
查看次数

BreakIterator与中文文本无法正常工作

我使用BreakIterator.getWordInstance将中文文本拆分为单词.这是我的例子

import java.text.BreakIterator;
import java.util.Locale;

public class Sample {
    public static void main(String[] args) {
        String stringToExamine = "I like to eat apples. ???????";

        //print each word in order
        BreakIterator boundary = BreakIterator.getWordInstance(new Locale("zh", "CN"));
        boundary.setText(stringToExamine);

        printEachForward(boundary, stringToExamine);
    }

    public static void printEachForward(BreakIterator boundary, String source) {
        int start = boundary.first();
        for (int end = boundary.next(); end != BreakIterator.DONE; start = end, end = boundary.next()) {
            System.out.println(start + ": " + source.substring(start, end));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的示例文本来自/sf/answers/2955363211/

我得到的输出是

0: …
Run Code Online (Sandbox Code Playgroud)

java chinese-locale breakiterator

3
推荐指数
1
解决办法
540
查看次数