我的应用程序需要能够检测字符串中的单词数。我为此使用了 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 上,上面的代码返回 2,但在 Linux 上,它返回 1。事实上,无论字符串中有多少个汉字,它都返回 1。它对 Windows 和 Linux 的英文都适用,但它不检测中文单词边界在 Linux 上。我在 icu 项目中将此作为Jira 发布: 根据他们的说法 Linux 是正确的,我的测试用例都是单个中文单词和多个字符。他们没有解决 Windows 和 Linux 上的不同行为