StringUtils.isNumeric 对于“”返回 true,对于 7.8 返回 false。这当然是记录在案的行为,但对我来说确实不是最方便的。还有其他东西(理想情况下在 commons.lang 中)提供 isActuallyNumeric 吗?
4 回答
尝试isNumber(String)
从org.apache.commons.lang.math.NumberUtils
.
检查 String [is] 是否是有效的 Java 编号。
有效数字包括用 0x 限定符标记的十六进制数、科学计数法和用类型限定符标记的数字(例如 123L)。
Null
并且空字符串将返回false
。
更新 -
isNumber(String)
现在已弃用。改为使用isCreatable(String)
。
谢谢你指出它。
你应该使用
NumberUtils.isCreatable
或者
NumberUtils.isParsable
它们都支持小数点值:
- NumberUtils.isCreatable支持十六进制、八进制数字、科学记数法和标有类型限定符的数字(例如 123L)。将返回无效的八进制值
false
(例如 09)。如果你想获得它的价值,你应该使用NumberUtils.createNumber。 - NumberUtils.isParsable只支持
0~9
和小数点(.
),任何其他字符(例如空格或其他任何东西)都会返回false
。
顺便说一下,StringUtils.isNumeric
commons-lang 和 commons-lang3 的实现方式有些不同。在 commons-lang 中,StringUtils.isNumeric("")是true
. 但在 commons-lang3 中,StringUtils.isNumeric("")是false
. 您可以通过文档获取更多信息。
这不完全在 中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(修改字符串以进行实验)...