所以,我正在制作一个包含发送文本的应用程序。这将通过服务器发送,与手机(公司)本身无关。
我们(我的公司和我)选择放置最多的字符数。 - 612。
因此,您可以使用612个字符空间。
我注意到特殊字符如:é,ñ,á,è,à等......使用超过1个点。 我们工作的国家(西班牙),使用了很多特殊字符,我们选择了如果人们输入一个特殊字符,而不是使用1个点,使用2个点。
基本上我想要做的是,当人打字时,计算特殊字符的数量,并计算剩余字符数量的“-1”。
说实话,我没有多少努力,因为我找不到与这种情况有关的任何东西。
这是我的方法。 (哦,EditText + Buttons等在对话框中。)
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){}
});
这是垃圾。我知道。直到找到更聪明,更快捷的方式,才能完成工作。
答案 0 :(得分:2)
只需运行插入的文字并比较字符
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;
答案 1 :(得分:2)
我建议让RegEx做这样的任务,它会给你更好的效率,而且从长远来看它更容易使用。
你可以尝试这样的事情
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");
}
leeme知道它是否有用。
答案 2 :(得分:0)
您还可以查看:
if(!Character.isLetter(str.charAt(i))) {
//its a special character
//increase count
}
else {
//its a letter
}