Обнаружение и подсчет специальных символов в EditText-Android
Итак, я делаю заявку, которая включает в себя отправку текстов друг другу. Это будет отправлено через сервер, и не будет иметь ничего общего с самим телефоном (компаниями).
Мы (моя компания и я) решили поставить максимальное количество символов. - 612.
Таким образом, вы можете использовать 612 символьных пространств.
Я заметил, что специальные символы, такие как: é, ñ, á, è, à и т. д... используйте более 1 точки.
Так как страна (Испания), в которой мы работаем, использует много специальных символов, таких как те, мы выбрали, что если человек вводит в один из специальных символов, вместо того, чтобы использовать 1 пятно, используйте 2 пятна.
Итак, в основном то, что я хочу сделать, это, как человек печатает, подсчитать количество специальных символов и "-1" на количество оставшихся символов.
Я не очень старался быть честным, потому что не смог найти ничего подходящего для этой ситуации.
Вот мой метод. (О, и кнопки EditText + etc находятся в Диалог.)
private void smsPopUp() {
// TODO Auto-generated method stub
final Dialog smsDialog = new Dialog(this);
smsDialog.setContentView(R.layout.sms_dialog);
smsDialog.setCanceledOnTouchOutside(false);
Button cancelsms = (Button)smsDialog.findViewById(R.id.smsCancel);
EditText SmsText = (EditText) smsDialog.findViewById(R.id.etSmsText);
final TextView dialogCharCount = (TextView) smsDialog.findViewById(R.id.tvCharCount);
SmsText.addTextChangedListener(new TextWatcher(){
int i = 0;
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
i = 612 - s.length();
dialogCharCount.setText(String.valueOf(i) + " Characters Remaining..");
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
smsDialog.setTitle("To: " + numberfield.getText());
cancelsms.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
smsDialog.dismiss();
}
});
smsDialog.show();
}

(приложение выглядит плохо, но это только начало!)
--- Текущий Код ---
SmsText.addTextChangedListener(new TextWatcher(){
int i = 0;
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
String str = s.toString();
int specialCounter = 0;
//Loop through chars
for (int i = 0, len = str.length(); i < len; ++i) {
Character c = str.charAt(i);
if (c == 'ñ'
|| c == 'á' || c == 'à' || c == 'ã' || c == 'â' || c == 'ä' //a
|| c == 'Á' || c == 'À' || c == 'Ã' || c == 'Â' || c == 'Ä' //A
|| c == 'é' || c == 'è' || c == 'ÿ' || c == 'ê' || c == 'ë' //e + y
|| c == 'É' || c == 'È' || c == 'Ÿ' || c == 'Ê' || c == 'Ë' //E + Y
|| c == 'í' || c == 'ì' || c == 'î' || c == 'ï' //i
|| c == 'Í' || c == 'Ì' || c == 'Î' || c == 'Ï' //I
|| c == 'ó' || c == 'ò' || c == 'õ' || c == 'ô' || c == 'ö' //o
|| c == 'Ó' || c == 'Ò' || c == 'Õ' || c == 'Ô' || c == 'Ö' //O
|| c == 'ú' || c == 'ù' || c == 'û' || c == 'ü' //u
|| c == 'Ú' || c == 'Ù' || c == 'Û' || c == 'ü' //U
) {
specialCounter++;
}
}
i = 612 - s.length() - specialCounter;
dialogCharCount.setText(String.valueOf(i) + " Characters Remaining..");
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
Это вздор. Я знаю. Это будет работа, пока я не найду более умный и быстрый способ.
3 ответов:
Просто пробежитесь по вставленному тексту и сравните символы
Set<Character> specialChars = new HashSet<Character>(); specialChars.add('é'); // ... specialChars.add('ñ'); String str = s.toString(); int specialCounter = 0; for (int i = 0, len = str.length(); i < len; ++i) { Character c = str.charAt(i); if (specialChars.contains(c)) { specialCounter++; } } int totalRemaining = 612 - s.length() - specialCounter;
Я бы предложил использовать регулярное выражение для выполнения такой задачи, что оно даст вам лучшую эффективность, а также его гораздо проще использовать в долгосрочной перспективе .
Вы можете попробовать что-то вроде этого
Static int countAlphabets, countSpecialCharacter;
String mesage= " это демонстрационный текст для идентификации $ words и специальных $ % ^ символов ! ! @ ";
String pattern4 = " [aA-zZ]"; / / регулярное выражение для подсчета символов String pattern5 ="!|@|$|%|^"; //РЕГУЛЯРНЫЙ Выражение для подсчета специальных символов
Pattern pattern11 = Pattern.compile(pattern4); Matcher matcher = pattern11.matcher(mesage); while(matcher.find()) { System.out.println("no of words are "+countAlphabets+++" and still" + " counting"); } Pattern pattern22= Pattern.compile(pattern5); Matcher matcher1= pattern22.matcher(mesage); while(matcher1.find()) { System.out.println("no of words are "++countSpecialCharacter+++" and still" + " counting"); }Лиме знать, если это полезно.
Вы также можете проверить, как:
if(!Character.isLetter(str.charAt(i))) { //its a special character //increase count } else { //its a letter }
Comments