Java 有没有替代StringUtils.isNumeric的方法,这就是我的意思?
StringUtils.isNumeric为“”返回true,为7.8返回false。这当然是记录在案的行为,但对我来说真的不是最方便的。是否还有其他东西(最好是在commons.lang中)可以提供ISactualyNumeric?请从Java 有没有替代StringUtils.isNumeric的方法,这就是我的意思?,java,apache-commons,Java,Apache Commons,StringUtils.isNumeric为“”返回true,为7.8返回false。这当然是记录在案的行为,但对我来说真的不是最方便的。是否还有其他东西(最好是在commons.lang中)可以提供ISactualyNumeric?请从org.apache.commons.lang.math.NumberUtils尝试 检查字符串[是否]是有效的Java数字 有效数字包括用0x限定符标记的十六进制, 用类型限定符标记的科学符号和数字(例如。 123L) Null和空字符串将返回false 更新
org.apache.commons.lang.math.NumberUtils
尝试
检查字符串[是否]是有效的Java数字
有效数字包括用0x限定符标记的十六进制,
用类型限定符标记的科学符号和数字(例如。
123L)
Null
和空字符串将返回false
更新-
isNumber(String)
现在已不推荐使用。改用
谢谢您指出。或者,您可以检查是否有字符与这样的非数字匹配
如果(myStr.replaceAll(“^$”,“).matches(“[^\\d\\\.]”)匹配(
),那么您知道其中有些内容不是0-9和/或a
下面是javascript等价物(修改字符串以进行实验)
这不完全在
commons.lang中,但它会起作用
try {
double d = Double.parseDouble(string);
// string is a number
} catch (NumberFormatException e) {
// string is not a number
}
不推荐使用
你应该使用
NumberUtils.isCreatable
或
它们都支持小数点值:
- 支持十六进制、八进制数字、科学记数法和带有类型限定符的数字(例如123L)。无效的八进制值将返回
false
(例如09)。如果你想得到它的值,你应该使用
- 仅支持
0~9
和小数点(
),任何其他字符(如空格或其他任何字符)将返回false
顺便说一下,StringUtils.isNumeric
的实现在commons-lang和commons-lang3之间有一些不同。在commons lang中,是否为true
。但是在commons-lang3中,isfalse
。您可以通过文档获取更多信息。正则表达式不会找到(并拒绝)具有多个小数点的字符串,例如“123.9.1”,我想您的意思是“[^\\D\\.]”。。。否则您的转义字符序列将不正确。@tim bender,是的,对不起。。。这是一个打字错误,大写字母也是。如果数字有可选的符号怎么办?比如+42.1或-16.4,您可以包含任何您不想查找的字符,比如-和+,因为这不是一个实际的数字求值器,所以您认为什么是有效的数字字符完全取决于您。例如,欧洲人使用,作为他们的小数点。这个解决方案假设你只使用10进制数字,在双精度域内。这在大多数情况下都是一个不错的假设,而且这个解决方案不会创建任何新的依赖项+1有些字符串如“5.f”或“5.d”将注册为数字(我猜这与双精度或浮点表示法有关),但其他字符串如“5.x”则不会。这稍微好一点。不幸的是:“+2”原来不是isNumber()。幸运的是,isNumber(“-2”)给出了真值。更新:isNumber(String)在commons-lang3 3.5中被弃用,我使用的是IsParsable(String),它工作得很好-感谢您的提示。刚刚跳过这个答案,请记住:@弃用此功能将在Lang 4.0中删除,请使用{@link numberrutils#iscreated(String)}相反
在3.2.1版本中,此方法为空字符串返回false
NumberUtils.isParsable