我使用BreakIterator来计算字符串中可见字符的数量。这对于英语来说是非常有效的。但是对于印地语来说,它并不像预期的那样起作用。
下面的字符串长度为3,但在视觉上被认为是单个字符。
ज्य
当我使用BreakIterator时,我希望它是一个单一的单元,但是它认为它是两个单元。下面是我的代码:
final String text = "ज्य";
final Locale locale = new Locale("hi","IN");
final BreakIterator breaker = BreakIterator.getCharacterInstance(locale);
breaker.setText(text);
int start = breaker.first();
for (int end = breaker.next();
end != BreakIterator.DONE;
start = end, end = breaker.next()) {
final String substring = text.substring(start, end);
}理想情况下,for循环应该使用start=0和end=3执行一次;但对于上面的字符串,则执行两次(start=0、end=2和start=2,end=3)。
我怎样才能让BreakIterator准确地工作呢?
更新:
上面的代码在作为JAVA程序运行时工作得很好。只有在安卓系统中使用时,它才会有不良行为。
因为这只发生在Android中,所以我在android中报告了一个bug:https://code.google.com/p/android/issues/detail?id=230832。
发布于 2016-12-22 07:03:06
我想你需要玩unicode字符
final String text = "\u091C\u094D\u092F";
final Locale locale = new Locale("hi","IN");
final BreakIterator breaker = BreakIterator.getCharacterInstance(locale);
breaker.setText(text);
int start = breaker.first();
for (int end = breaker.next();
end != BreakIterator.DONE;
start = end, end = breaker.next()) {
final String substring = text.substring(start, end);
System.out.println(substring);
}https://stackoverflow.com/questions/41270091
复制相似问题