現在、指定された文字列が有効な Double、Float、Integer、Long、または Short であるかどうかに基づいてブール値を返す検証メソッドがあります。これは、「asdf」などのケースを無効な文字列としてキャッチするように見えますが、「33asd」など、一連の数字で始まる無効な数値文字列がある場合は失敗するようです。その方法を以下に示します。
public static boolean isNumeric(String str, Class<? extends Number> cl) {
try {
if (cl.equals(Byte.class)) {
Byte.parseByte(str);
} else if (cl.equals(Double.class)) {
if (NumberUtils.convertStringToDouble(str, "###,###") == null) {
return false;
}
} else if (cl.equals(Float.class)) {
Float.parseFloat(str);
} else if (cl.equals(Integer.class)) {
Integer.parseInt(str);
} else if (cl.equals(Long.class)) {
Long.parseLong(str);
} else if (cl.equals(Short.class)) {
Short.parseShort(str);
}
} catch (NumberFormatException nfe) {
return false;
}
return true;
}
上記で使用した NumberUtils.convertStringToDouble メソッドは次のとおりです。
/**
* @param number
* - The String to convert.
* @param format
* - The format of the string representation of the double (e.g:
* "###,###.00")
* @return The String as a java.lang.Double if its valid; otherwise null.
*/
public static Double convertStringToDouble(String number, String format) {
try {
NumberFormat num = new DecimalFormat(format);
return num.parse(number).doubleValue();
} catch (ParseException e) {
return null;
} catch (NullPointerException ne) {
return null;
}
}