【发布时间】:2012-06-05 06:10:00
【问题描述】:
StringUtils.isNumeric 对于“”返回 true,对于 7.8 返回 false。这当然是记录在案的行为,但对我来说确实不是最方便的。还有其他东西(最好是在 commons.lang 中)提供 isActuallyNumeric 吗?
【问题讨论】:
-
3.2.1版本,该方法对空字符串返回false
标签: java apache-commons
StringUtils.isNumeric 对于“”返回 true,对于 7.8 返回 false。这当然是记录在案的行为,但对我来说确实不是最方便的。还有其他东西(最好是在 commons.lang 中)提供 isActuallyNumeric 吗?
【问题讨论】:
标签: java apache-commons
NumberUtils.isNumber 已弃用。
你应该使用
NumberUtils.isCreatable
或
NumberUtils.isParsable
都支持小数点值:
false(例如 09)。如果你想得到它的值,你应该使用NumberUtils.createNumber。0~9 和小数点(.),任何其他字符(例如空格或其他任何内容)都将返回false。顺便说一下,StringUtils.isNumeric 的实现在 commons-lang 和 commons-lang3 之间有些不同。在 commons-lang 中,StringUtils.isNumeric("") 是 true。但是在 commons-lang3 中,StringUtils.isNumeric("") 是 false。您可以通过文档获取更多信息。
【讨论】:
从org.apache.commons.lang.math.NumberUtils 尝试isNumber(String)。
检查字符串 [is] 是否是有效的 Java 编号。
有效数字包括用 0x 限定符标记的十六进制, 科学记数法和标有类型限定符的数字(例如 123L)。
Null和空字符串将返回false。
更新 -
isNumber(String) 现在已弃用。请改用isCreatable(String)。
感谢eav 指出。
【讨论】:
@deprecated This feature will be removed in Lang 4.0, use {@link NumberUtils#isCreatable(String)} instead
这并不完全在 commons.lang 中,但它会起作用。
try {
double d = Double.parseDouble(string);
// string is a number
} catch (NumberFormatException e) {
// string is not a number
}
【讨论】:
或者,您可以检查是否有任何字符与这样的非数字匹配..
if(myStr.replaceAll("^$"," ").matches("[^\\d\\.]")) 那么你就知道里面有些东西不是 0-9 和/或 .
这是等效的 javascript(修改字符串以进行实验)...
【讨论】: