2015-11-21 3 views
0

У меня есть текст редактирования в приложении для Android, и я хочу, чтобы пользователь не вводил ввод, когда длина строки в байтах достигает предела. Он отлично работает на английском, но не на иврите.Android text text limit

Предел равен 256, поэтому, когда вход на иврите, я могу вставить только 128 символов. Проблема в том, что я вставляю ивритские буквы с пунктуацией. Допустим, что я вставляю точку, которая составляет 1 байт, она позволяет вводить более 128 символов, даже если символы являются только ивритскими буквами и пунктуацией.

 @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      int length = s.toString().getBytes().length; 

      if (length == bytes_limit) 
      { 
       str = s.toString(); 
      } 
      else if (length > bytes_limit) 
      { 
       input.setText(str); 
       input.setSelection(str.length()); 
      } 

     } 

Update:

Строка Пример: "שלום, מה שלומך"

Update 2:

@Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      int length = s.toString().getBytes().length; 

      if (length <= bytes_limit) 
      { 
       str = s.toString(); 
      } 
      else if (length > bytes_limit) 
      { 
       input.setText(str); 
       input.setSelection(str.length()); 
      } 

     } 
+0

Почему вы не используете 'String.length()'? – Amirag

+0

Я не совсем понимаю, что вы пытаетесь добиться. Вы хотите ограничить edittext до 128 символов? –

+0

@amirag, потому что String.length() не подсчитывает байты, он подсчитывает символы. – Elior

ответ

0

пунктуация персонажи тоже, вы пишете их в дополнение к еврейскому письму, которое вы хотите написать (если я не ошибаюсь, вы можете добавить их с ALT + XXXX). Они характерны, как и любые другие, поэтому, когда вы пишете их, вы добавляете символы.
Точка (.) Не имеет знаков препинания, поэтому требуется только один байт.

Чтобы решить проблему, вы можете удалить все пункты пунктуации.

Вы можете создать функцию, чтобы игнорировать все знаки препинания:

private String removePunctuation(String s) 
{ 
    for(int i = 0; i < s.length(); i++) 
    { 
     if(!(s.charAt(i) <= 'ת' && s.charAt(i) >= 'א')) 
     { 
     s = s.substring(0,i) + s.substring(i+1); 
     } 
    } 
    return s; 
} 

Примечание будет удалить все знаки препинания, в том числе и -: и так далее ...
Вы можете добавить исключения к условию, позволяющему «-» или другим.

Удачи :)