Android - 如何以xx-xxx-xxx-xxx-x格式获取edittext?

时间:2016-08-26 05:30:15

标签: android android-edittext

我想在EditText上以 xx-xxx-xxx-xxx-x 格式显示数字。

例如(01-140-176-515-4)

我尝试修改以下代码,该代码以信用卡号格式显示号码 的(XXXX-XXXX-XXXX-XXXX)

et_cardnumber.addTextChangedListener(new TextWatcher() {

        private static final int TOTAL_SYMBOLS = 19; // size of pattern 0000-0000-0000-0000
        private static final int TOTAL_DIGITS = 16; // max numbers of digits in pattern: 0000 x 4
        private static final int DIVIDER_MODULO = 5; // means divider position is every 5th symbol beginning with 1
        private static final int DIVIDER_POSITION = DIVIDER_MODULO - 1; // means divider position is every 4th symbol beginning with 0
        private static final char DIVIDER = '-';

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

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

            iv_cardtype.setImageResource(getCreditCardTypeForImageView(et_cardnumber.getText().toString()));
        }

        @Override
        public void afterTextChanged(Editable s) {
            if (!isInputCorrect(s, TOTAL_SYMBOLS, DIVIDER_MODULO, DIVIDER)) {
                s.replace(0, s.length(), buildCorrecntString(getDigitArray(s, TOTAL_DIGITS), DIVIDER_POSITION, DIVIDER));
            }
        }

        private boolean isInputCorrect(Editable s, int totalSymbols, int dividerModulo, char divider) {
            boolean isCorrect = s.length() <= totalSymbols; // check size of entered string
            for (int i = 0; i < s.length(); i++) { // chech that every element is right
                if (i > 0 && (i + 1) % dividerModulo == 0) {
                    isCorrect &= divider == s.charAt(i);
                } else {
                    isCorrect &= Character.isDigit(s.charAt(i));
                }
            }
            return isCorrect;
        }

        private String buildCorrecntString(char[] digits, int dividerPosition, char divider) {
            final StringBuilder formatted = new StringBuilder();

            for (int i = 0; i < digits.length; i++) {
                if (digits[i] != 0) {
                    formatted.append(digits[i]);
                    if ((i > 0) && (i < (digits.length - 1)) && (((i + 1) % dividerPosition) == 0)) {
                        formatted.append(divider);
                    }
                }
            }

            return formatted.toString();
        }

        private char[] getDigitArray(final Editable s, final int size) {
            char[] digits = new char[size];
            int index = 0;
            for (int i = 0; i < s.length() && index < size; i++) {
                char current = s.charAt(i);
                if (Character.isDigit(current)) {
                    digits[index] = current;
                    index++;
                }
            }
            return digits;
        }
    });

当我进行更改以获得我想要的格式时,我无法正确使用。

有人可以帮助我以 xx-xxx-xxx-xxx-x 格式获取数字吗?

3 个答案:

答案 0 :(得分:0)

我在Android中不太了解,但尝试构建类似的东西。

str Yourstring = "";
for (int i = 0; i < digits.length; i++) {
                if (i == 2 || i == 5 || i == 8 || i == 11) {
                    Yourstring = Yourstring + "-" +digits[i];
                  }
              else 
                  {
                    Yourstring = Yourstring +digits[i];
                  }
            }

答案 1 :(得分:0)

我已在此link中回答了此问题,请根据您的格式更改逻辑

答案 2 :(得分:0)

使用此库。 它会允许根据你的形式

EditText Pattern lib