我的应用程序需要能够检测字符串中的单词数。我正在使用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上的字边界。 我将其发布为Jira in the icu project: 据他们说Linux是正确的,我的测试用例都是带有多个字符的单个中文单词。他们没有解决Windows和Linux上的不同行为
答案 0 :(得分:0)
根据ICU4J站点,我的测试用例都是带有多个字符的单个单词,因此Linux可以正常工作。他们没有评论为什么相同的代码在Windows上表现不同。我只需要它与Linux兼容即可。 如果我认识更多的说中文的人,我早就想出来了。