Я использую 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; Но для приведенной выше строки он выполняется дважды (начало = 0, конец = 2 и начало = 2, конец = 3).
Как я могу заставить BreakIterator
работать точно?
ОБНОВЛЕНИЕ:
Приведенный выше фрагмент кода отлично работает при запуске в качестве программы JAVA. Он плохо себя ведет только при использовании в ANDROID.
Поскольку это происходит только в Android, я сообщил об ошибке в Android: https://code.google.com/p/android/issues/detail?id=230832