使用TextWatcher的Android格式化文本



我想以格式格式化我的输入号码xxxxxx/xx/x我提出了一个算法,但是它很糟糕,但它很漂亮,而是使用索引在位置6和9上插入 /,问题出现在删除上,如果一旦无法删除任何斜率,则以下是我的代码:

@Override
        public void afterTextChanged(Editable s) {
            edt.removeTextChangedListener(this);

            if(TextUtils.isEmpty(s))
                return;
            String string  = s.toString().replace(" ", "");
            if(string.length() > 10)
                string = string.substring(0, 11);
            StringBuilder sb = new StringBuilder(string);

            if(sb.length() >= 6)
                sb.replace(6, 7, "");
            if(sb.length() >= 6 )
                sb.insert(6, "/");

            if(sb.length() >= 9)
                sb.replace(9, 10, "");
            if(sb.length() >= 9)
                sb.insert(9, "/");

            edt.setText(sb.toString());
            edt.setSelection(sb.length());
            edt.addTextChangedListener(this);
        }

任何人都有更好的解决方案?

如果形成此号码是电话号码,请使用https://github.com/googlei18n/libphonenumber

否则您可以做:

x = x.substring(0, 6) + "/" + x.substring(6, 9) + "/" + x.substring(9, 11);

最新更新