Android: пробел после каждых 10 цифр в тексте редактирования с помощью средства просмотра текста

В тексте редактирования Android, как разделить ввод 10-значного числа пробелом? Я использую Android Text Watcher и пытаюсь ввести в поле несколько 10-значных чисел. Проблема возникает, когда несколько чисел копируются и вставляются в поле, и в этот раз они не занимают эти пробелы. Пожалуйста, дайте мне знать решение, чтобы разрешить ввод нескольких чисел с пробелом после каждого 10-значного числа, когда число копируется из другого места.


person Sne    schedule 14.08.2018    source источник
comment
что происходит, когда вы вставляете номер?   -  person Vladyslav Matviienko    schedule 14.08.2018
comment
отпишитесь, пожалуйста, что вы сделали?   -  person Saurabh Vadhva    schedule 14.08.2018
comment
Как вы будете уверены, что номер состоит из 10 цифр, что, если у него есть префикс кода страны?   -  person Khemraj Sharma    schedule 14.08.2018
comment
дублирование - stackoverflow.com/questions/10252757/   -  person Arnold Brown    schedule 14.08.2018
comment
afterTextChanged(Editable s){if (s.length() › 0&&(s.length() %11)==0){final char c = s.charAt(s.length() - 1);if (space = = c{s.delete(s.length() - 1,s.length()); я сделал это в Textwatcher } } if (s.length() › 0 && (s.length() % 11) == 0) { char c = s.charAt(s.length() - 1); if (Character.isDigit(c) && TextUtils.split(s.toString(), String.valueOf(space)).length ‹= 10 ) { s.insert(s.length() - 1, String.valueOf(пробел)); } } }   -  person Sne    schedule 14.08.2018


Ответы (2)


Это будет работать как для типа, так и для копирования/вставки из другого места.

yourEditText.addTextChangedListener(new TextWatcher() {
        private static final char space = ' ';

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void afterTextChanged(Editable s) {

            int pos = 0;
            while (true) {
                if (pos >= s.length()) break;
                if (space == s.charAt(pos) && (((pos + 1) % 11) != 0 || pos + 1 == s.length())) {
                    s.delete(pos, pos + 1);
                } else {
                    pos++;
                }
            }
            pos = 10;
            while (true) {
                if (pos >= s.length()) break;
                final char c = s.charAt(pos);
                if (Character.isDigit(c)) {
                    s.insert(pos, "" + space);
                }
                pos += 11;
            }
        }
    });
person Anisuzzaman Babla    schedule 14.08.2018
comment
Он будет работать как для ввода, так и для копирования/вставки. Вы пробовали это? @Сне - person Anisuzzaman Babla; 14.08.2018
comment
Добро пожаловать. Удачи. - person Anisuzzaman Babla; 16.08.2018

Отредактируйте и используйте следующий код в соответствии с вашими потребностями.

StringBuilder s;
s = new StringBuilder(yourTxtView.getText().toString());

for(int i = 10; i < s.length(); i += 10){
s.insert(i, " "); // this line inserts a space
}
yourTxtView.setText(s.toString());

и когда вам нужно получить строку без пробелов, сделайте это:

String str = yourTxtView.getText().toString().replace(" ", "");
person amit    schedule 14.08.2018