Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有替代StringUtils.isNumeric的方法,这就是我的意思?_Java_Apache Commons - Fatal编程技术网

Java 有没有替代StringUtils.isNumeric的方法,这就是我的意思?

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 更新

StringUtils.isNumeric为“”返回true,为7.8返回false。这当然是记录在案的行为,但对我来说真的不是最方便的。是否还有其他东西(最好是在commons.lang中)可以提供ISactualyNumeric?

请从
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中,is
false
。您可以通过文档获取更多信息。

正则表达式不会找到(并拒绝)具有多个小数点的字符串,例如“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