2017-02-13 4 views
2

У меня есть EditText, чтобы получить описание и вы хотите установить максимальную длину 145 символов. Я установил maxlength 145 в XML. Это правильно работает для английского языка. Но для языков, отличных от английского, специфического, маратхи, хинди и т. Д., Он не работает должным образом. Я считаю каждый символ отдельным символом.Как подсчитать символы в строке юникода (хинди/маратхи) в android

Например: «व्ही»

это считается как один символ на хинди, и его длина должна быть 1, но он возвращает мне длину 2.

я видел решение в this link

Но он не работает для языка хинди/маратхи, потому что он не может обнаружить подключенные символы. Как обнаружить связанные символы?

Заранее спасибо :)

ответ

0

Plz попробовать этот код

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

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

textview.setText(count); 
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 FAQ на то, что он называет графема кластеры: http://unicode.org/faq/char_combmark.html#7

Пример кода из Android документации: https://developer.android.com/reference/java/text/BreakIterator.html

ICU имеет BreakIterator реализацию, тоже: http://site.icu-project.org/ и вы можете импортировать в Gradle:

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