我目前有一个验证方法,它根据给定的字符串是有效的 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;
}
}