我正在使用EditText字段,用户可以在其中指定金额。
我将inputType设置为numberDecimal,这很好用,除了它允许输入诸如123.122之类的数字之外,这对于金钱而言并不完美。
我写了一些自定义的InputFilter方法,它的工作原理是这样的。用户可以在点2和点2之后添加5个元素,但不能正常工作我的目标是:
1)使用时最多应输入9999.99
2)如果用户从0开始并且第二个元素也为0,则它必须替换为。(例如0.0),并在点后两个元素之后替换(例如0.01)这是我的代码
public class DecimalDigitsInputFilter implements InputFilter {
Pattern mPattern;
public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
mPattern=Pattern.compile("[0-9]*" + (digitsBeforeZero-1) + "}+((\\.[0-9]*" + (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;
}
}
我这样调用此方法
amountValue.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(5,2)});
如何重新编写代码以解决问题?谢谢
您构造的正则表达式完全错误。
正则表达式的第一部分是此表达式:
"[0-9]*" + (digitsBeforeZero-1) + "}+"
说digitsBeforeZero = 5
,这会让您:
[0-9]*4}+
这不是有效的正则表达式。正则表达式应该是:
[0-9]{1,5}
表示1到5位数字。