首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓系统中的BreakIterator错误计算字符

安卓系统中的BreakIterator错误计算字符
EN

Stack Overflow用户
提问于 2016-12-21 19:01:27
回答 1查看 218关注 0票数 3

我使用BreakIterator来计算字符串中可见字符的数量。这对于英语来说是非常有效的。但是对于印地语来说,它并不像预期的那样起作用。

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

ज्य

当我使用BreakIterator时,我希望它是一个单一的单元,但是它认为它是两个单元。下面是我的代码:

代码语言:javascript
复制
    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

EN

回答 1

Stack Overflow用户

发布于 2016-12-22 07:03:06

我想你需要玩unicode字符

甲骨文医生用于字符边界

代码语言:javascript
复制
    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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41270091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档