检测和统计EditText-Android中的特殊字符 [英] Detect and count special Characters in EditText - Android

查看:36
本文介绍了检测和统计EditText-Android中的特殊字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我正在制作一个应用程序,其中包括相互发送文本。这将通过服务器发送,与电话(公司)本身没有任何关系。

我们(我的公司和我)选择了最大字符数。-612。

因此,您可以使用612个字符空格。

我注意到特殊字符,如:é、ñ、á、è、à等...使用1个以上的光斑。 由于我们工作的国家(西班牙)使用了很多这样的特殊字符,因此我们选择如果某人输入其中一个特殊字符,而不是使用1个SPOT,则使用2个SPOT。

所以基本上我想要做的是,当这个人在打字时,计算特殊字符的数量,并根据剩余的字符数量计算"-1"。

老实说,我没有尝试太多,因为我找不到与此情况相关的任何东西。

这是我的方法。(哦,而且EditText+按钮等在一个对话框中。)

 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){}

        });

这是垃圾。我知道呀。在我找到更聪明、更快捷的方法之前,这就是我的工作。

推荐答案

只需浏览插入的文本并比较字符

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;

这篇关于检测和统计EditText-Android中的特殊字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆