如何在android中的unicode字符串(Hindi / Marathi)中计算字符数

时间:2017-02-13 12:28:48

标签: android unicode-string

我有一个EditText来获取描述,并希望设置最大长度为145个字符。 我在XML中设置了maxlength 145。这适用于英语。 但对于英语以外的语言,特定的,马拉地语,印地语等,它不能正常工作。我将每个符号都算作单独的字符。

例如:“व्ही”

这被认为是印地语中的一个字符,它的长度应为1,但它返回长度为2。

我在this link

中看到了解决方案

但它不适用于印地语/马拉地语,因为它无法检测连接的字符。如何检测连接的字符?

提前致谢:)

2 个答案:

答案 0 :(得分:0)

Plz试试这段代码

String str = "व्ही";
int count = 0;

for(int i=0; i<str.length(); i++)
{
    if(!isMark(str.charAt(i)))
        count++;
}

textview.setText(count);

答案 1 :(得分:0)

试试这个:

import java.text.BreakIterator;
import java.util.Locale;

public class MyClass {

    private int graphemeClusterCount(Locale locale) {

        String text = "व्ही";

        BreakIterator breakIterator = BreakIterator.getCharacterInstance(locale);

        breakIterator.setText(text);

        int count = 0;

        int start = breakIterator.first();
        for (int end = breakIterator.next();
             end != BreakIterator.DONE;
             start = end, end = breakIterator.next()) {

            count++;
        }

        return count;
    }
}

一些参考文献:

关于它所谓的字形集群的Unicode常见问题:http://unicode.org/faq/char_combmark.html#7

Android文档中的示例代码:https://developer.android.com/reference/java/text/BreakIterator.html

ICU也实施BreakIteratorhttp://site.icu-project.org/您可以在Gradle中导入:

compile 'com.ibm.icu:icu4j:58.2'