BreakIterator
を使用して、文字列内に表示される文字の数を数えます。これは英語に完全に対応しています。しかし、ヒンディー語の場合は、期待どおりに動作しません。AndroidのBreakIteratorが文字数を正しくカウントしない
以下の文字列の長さは3ですが、視覚的には1文字と見なされます。
ज्य
IはBreakIterator
を使用する場合、それは、単一のユニットとしてそれを考慮することが予想されるが、それは2つの単位として考えます。以下私のコードである:
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
ループが開始= 0と終了= 3で一度実行されるべきです。しかし、上の文字列は2回実行されます(開始= 0、終了= 2、開始= 2、終了= 3)。
BreakIterator
をどうすれば正しく動作させることができますか?
UPDATE:
JAVAプログラムとして実行すると、コードの上の部分は完璧に動作します。それは、ANDROIDで使用されたときだけ誤動作します。 https://code.google.com/p/android/issues/detail?id=230832
おかげSujitKumarでプレーする必要があると思う:これが唯一のAndroidで起こるので
は、私はアンドロイドのバグを報告しています。しかし、質問の私の更新を見てください。このコードはJavaで完全に機能します。それは私がAndroidでそれを使うときだけ誤動作する。 – Henry