gpt4 book ai didi

java - 使用 Java Pattern API 在 EdiText 上过滤条件

转载 作者:行者123 更新时间:2023-11-30 08:47:26 24 4
gpt4 key购买 nike

我有以下需求。

用户只能在接受数字和小数但不接受负数的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com