java - 使用 Java Pattern API 对 EdiText 进行过滤条件

标签 java android

我有以下要求。

用户只能在 Android EditText 上输入以下范围内的任何值,该值接受数字和小数,但不接受负数。

最小值:0

最大值:10

中间值(最大值和最小值之间)可以是 0.1 , 0.2 , 0.3 ..... 9.8 , 9.9 ,10

我使用了Java模式来实现。

int digitsBeforeZero = 2;
int digitsAfterZero = 1;


    public class DecimalDigitsInputFilter implements InputFilter {

            private Pattern mPattern;

            public DecimalDigitsInputFilter(int digitsBeforeZero, int digitsAfterZero) {
                mPattern = Pattern.compile(
                        "[0-9]{0," + (digitsBeforeZero - 1) + "}+((\\.[0-9]{0," + (digitsAfterZero - 1) + "})?)||(\\.)?");
            }

            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

                Matcher matcher = mPattern.matcher(dest);
                if (!matcher.matches())
                    return "";
                return null;
            }

        }

上述代码适用于以下条件。

i> 对于 10 及以上的值,它不接受任何小数,这是正确的。

ii> 它接受 0.0 - 9.9 范围内的小数点后一位数字,这也是正确的。

但它接受的值是 0 、 0.1 、 0.2 ..... 9.8 、 9.9 、 10 、 11 、 12 ...... 99

如何在现有条件下将值限制为10?

任何建议都会有帮助。

最佳答案

试试这个:

 public class DecimalDigitsInputFilter implements InputFilter {

      private final Pattern mPattern = Pattern.compile("((10)|([0-9]?(\\.[0-9]?)?))");
      @Override
      public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
                                 int dend) {
        final StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(dest, 0, dstart);
        stringBuilder.append(source, start, end);
        stringBuilder.append(dest, dend, dest.length());
        Matcher matcher = mPattern.matcher(stringBuilder);
        if (!matcher.matches())
          return dest.subSequence(dstart,dend);
        return null;
      }
  }

关于java - 使用 Java Pattern API 对 EdiText 进行过滤条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32439285/

相关文章:

java - Android 服务需要在后台运行,直到应用程序被杀死

java - 查找字符串最后一次出现之前的出现索引

android - 同步适配器服务已导出但未 protected

android - FLAG_ACTIVITY_NEW_TASK 未按预期运行

java - 使用 zxing 解码 QRCode。 java

java - "rename"文件项

java - java中有-A关系

java - Java中二叉树的递归检查

android - 短信广播接收器不工作

java - CardLayout Swap 刷新面板