gpt4 book ai didi

java - Android 中的 BreakIterator 错误地计算字符

转载 作者:行者123 更新时间:2023-12-02 09:02:47 25 4
gpt4 key购买 nike

我正在使用 BreakIterator 来计算字符串中可见字符的数量。这非常适合英语。但对于印地语,它无法按预期工作。

下面的字符串长度为3,但视觉上被视为单个字符。

ज्य

当我使用 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 循环应在 start=0 和 end=3 的情况下执行一次;但对于上面的字符串,它执行了两次(start=0、end=2 和 start=2、end=3)。

如何让 BreakIterator 正常工作?

更新:

上面的代码作为 JAVA 程序运行时可以完美运行。仅当在 ANDROID 中使用时才会出现错误。

由于这种情况仅发生在 Android 中,因此我报告了 android 中的一个错误:https://code.google.com/p/android/issues/detail?id=230832

最佳答案

我认为你需要使用 unicode 字符

Oracle Doc. for Character Boundaries

    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);
}

关于java - Android 中的 BreakIterator 错误地计算字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41270091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com