java 为什么NumberUtils.isNumber()不能正常工作?

3hvapo4f  于 2023-02-14  发布在  Java
关注(0)|答案(4)|浏览(418)

当我检查条件08或09或010及以上时,org.apache.commons.lang3.math.NumberUtils.isNumber("08")中以0开头

ugmeyewa

ugmeyewa1#

isNumber方法已弃用:
isNumber(String str)已弃用。Lang 4.0中将删除此功能,请改用isCreatable(String)
isCreatable用于上述目的。
将通过isCreatable方法检测您的上述检查ocatl类型值的要求:

org.apache.commons.lang3.math.NumberUtils.isCreatable("08") // this will return true.

这个方法检查字符串是否是一个有效的Java数字。
有效的数字包括用0x或0X限定符标记的十六进制数字、八进制数字、科学记数法和用类型限定符标记的数字(例如123L)。
以前导零开头的非十六进制字符串被视为八进制值。因此,字符串09将返回false,因为9不是有效的八进制值。但是,以0开头的数字被视为十进制。
参考公文

n6lpvg4x

n6lpvg4x2#

以前导零开头的非十六进制字符串被视为八进制值。
因此,字符串**"09"将返回false**。
这是因为9不是有效的八进制值。
参考官方文件

sq1bmfud

sq1bmfud3#

https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/math/NumberUtils.html#isCreatable-java.lang.String-
使用isCreatable代替,我假设isNumber的工作原理基本相同。
以前导零开头的非十六进制字符串被视为八进制值。因此,字符串09将返回false,因为9不是有效的八进制值。但是,以0开头的数字被视为十进制。
00 - 07是数字。08 - 010不被解释为八进制数字,但这是库的问题。
参见What do numbers starting with 0 mean in python?
如有疑问,请阅读手册。

46scxncf

46scxncf4#

使用isParsable()

NumberUtils.isCreatable("09"); // FALSE
NumberUtils.isNumber("09"); // FALSE
NumberUtils.isParsable("09"); // TRUE

相关问题