我在工作中做一些代码维护,我遇到了这个小片段......
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend) {
if (end > start) {
String destTxt = dest.toString();
String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend);
try {
if (!resultingTxt.matches("[0123456789]*[.]?[0123456789]{0,2}")||
Float.parseFloat(resultingTxt)>360f) {
if (source instanceof Spanned) {
SpannableString sp = new SpannableString("");
return sp;
} else {
return "";
}
}
} catch (NumberFormatException nfe) {
// doesn't matter.
}
}
return null;
}
现在我不是 reg ex 专家,但在我看来这是一种非常冗长的方法来检查文本框是否不为空、是否包含 0 到 360 之间的数字、不超过 2 位小数精度,并且不'不包含文本。我错过了什么吗?这来自一个 android EditText。
下一部分 - 为什么以主的名义你会这样做,而不是强制文本仅是数字,并使用 Double.parseDouble() 或类似的东西?正则表达式是否值得快得多?
这段代码是一团糟,所以如果这个人一直在阅读我不会感到惊讶 - http://freeworld.thc.org/root/phun/unmaintain.html