icu4j BreakIterator returns Linux 上的中文单词边界不正确

icu4j BreakIterator returns incorrect word boundaries for Chinese on Linux

我的应用程序需要能够检测字符串中的单词数。我为此使用了 ICU4J 库,特别是 BreakIterator。此代码需要适用于英语、中文、日语和德语。我发现中文似乎在 Windows 上可以正常工作,但在 linux 上却不行。在 linux 上,它没有找到分词符。我是 ICU4J 的新手所以它可能是我的代码?

    public static int getWordBoundaryCount(String term, Locale locale) {
    if (term == null) {
        throw new IllegalArgumentException("term is null");
    }
    int wordBoundaryCount = 0;
    BreakIterator wb = BreakIterator.getWordInstance(locale);
    synchronized(wb) {
        wb.setText(term);
        int start = wb.first();
        for (int end = wb.next(); end != BreakIterator.DONE; start = end, end = wb.next()) {
            String tt = term.substring(start,end);
            System.out.println(tt);
            wordBoundaryCount++;
        }
    }
    return wordBoundaryCount;
}

给定字符串“丙酿”和从 zh_CN 创建的语言环境。在Windows上面的代码returns2,但是在Linux上却是returns1。确实无论字符串中有多少个汉字它returns1。它对 Windows 和 Linux 的英文都适用,但它不会检测 Linux 上的中文单词边界。 我将其发布为 Jira in the icu project: 据他们说 Linux 是正确的,我的测试用例都是单个中文单词和多个字符。他们没有解决 Windows 和 Linux

上的不同行为

根据 ICU4J 网站,我的测试用例都是包含多个字符的单个单词,因此 Linux 工作正常。他们没有评论为什么相同的代码在 Windows 上表现不同。我只需要它与 Linux 一起工作。 如果我认识更多说中文的人,我早就想出来了。