17

StringUtils.isNumeric 对于“”返回 true,对于 7.8 返回 false。这当然是记录在案的行为,但对我来说确实不是最方便的。还有其他东西(理想情况下在 commons.lang 中)提供 isActuallyNumeric 吗?

4

4 回答 4

40

尝试isNumber(String)org.apache.commons.lang.math.NumberUtils.

检查 String [is] 是否是有效的 Java 编号。

有效数字包括用 0x 限定符标记的十六进制数、科学计数法和用类型限定符标记的数字(例如 123L)。

Null并且空字符串将返回false

更新 -

isNumber(String)现在已弃用。改为使用isCreatable(String)

谢谢你指出它。

于 2012-05-31T00:12:46.400 回答
12

NumberUtils.isNumber已弃用。

你应该使用

NumberUtils.isCreatable

或者

NumberUtils.isParsable

它们都支持小数点值:

  • NumberUtils.isCreatable支持十六进制、八进制数字、科学记数法和标有类型限定符的数字(例如 123L)。将返回无效的八进制值false(例如 09)。如果你想获得它的价值,你应该使用NumberUtils.createNumber
  • NumberUtils.isParsable只支持0~9和小数点(.),任何其他字符(例如空格或其他任何东西)都会返回false

顺便说一下,StringUtils.isNumericcommons-lang 和 commons-lang3 的实现方式有些不同。在 commons-lang 中,StringUtils.isNumeric("")true. 但在 commons-lang3 中,StringUtils.isNumeric("")false. 您可以通过文档获取更多信息。

于 2017-08-08T18:30:49.753 回答
4

这不完全在 中commons.lang,但它会起作用。

try {
    double d = Double.parseDouble(string);
    // string is a number
} catch (NumberFormatException e) {
    // string is not a number
}
于 2012-05-31T00:48:50.530 回答
1

或者,您可以检查是否有任何字符与这样的非数字匹配..

if(myStr.replaceAll("^$"," ").matches("[^\\d\\.]"))那么你就知道里面有些东西不是 0-9 和/或 .

这是等效的javascript(修改字符串以进行实验)...

http://jsfiddle.net/LzZE6/

于 2012-05-31T00:14:16.680 回答