仕事でコードのメンテナンスをしていて、この小さなスニペットに出くわしました...
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;
}
今、私は正規表現の専門家ではありませんが、これはテキストボックスが空ではないかどうか、0 から 360 までの数値が含まれているかどうか、小数点以下 2 桁以下の精度であるかどうかを確認する非常に冗長な方法のように思えます。テキストが含まれていません。何か不足していますか?これは、Android EditText から出てきます。
次の部分 - テキストを強制的に数値のみにするのではなく、Double.parseDouble() または同等のものを使用するのではなく、なぜ主の名においてこれを行うのでしょうか? 正規表現はそれだけの価値があるほど高速ですか?
このコードはめちゃくちゃなので、この男が読んでいても驚かないでしょう - http://freeworld.thc.org/root/phun/unmaintain.html