Webページの入力フォームやAPIのパラメータなどが数値かどうか判定したい時は多々ある。
そんな時いつも、何使うんだっけ、NumberUtilsのあれだよほら、クラス名と2つのメソッド名までは出てくるのだが、どっちがどういうのなんだっけ?となってしまうので備忘録として残しておくことにする。
NumberUtilsクラスを使う
org.apache.commons.lang.math.NumberUtils
はcommons-lang
等に含まれている。
maven の場合は以下をpom.xml
に記述することで使用可能となる。
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
NumberUtils.isNumberとNumberUtils.isDigitの違い
NumberUtils.isNumber(String str)
public static boolean isNumber(String str)
10進数以外も数値であればtrueを返す
ポイント:javaが数値として解釈できるものであればtrue
つまり2進数でも16進数でもjavaが解釈できるので数値である
NumberUtils.isDigit(String str)
public static boolean isDigits(String str)
ざっくり言うと、10進数の整数ならtrueを返す
ポイント:整数(自然数と0)ならばtrue
digit
の意味通り、指で数えられるような数値
まとめ
人間も2進数や16進数を解釈しようと思えば出来なくはないですが、
大根買うのに使わないよね!、という前提で大抵はNumberUtils.isDigit
を使って
(人間が入力した)数値かどうか
のチェックをすればよいのではないかと思います。
おまけ
StringUtils.isNumeric(CharSequence cs)
ってのもあるようです。
public static boolean isNumeric(CharSequence cs)
StringUtils.isNumeric(null) = false
StringUtils.isNumeric("") = false
StringUtils.isNumeric(" ") = false
StringUtils.isNumeric("123") = true
StringUtils.isNumeric("12 3") = false
StringUtils.isNumeric("ab2c") = false
StringUtils.isNumeric("12-3") = false
StringUtils.isNumeric("12.3") = false
StringUtils.isNumeric("-123") = false
StringUtils.isNumeric("+123") = false