diff --git a/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java index 084ddb622..edaa6b7af 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java @@ -1059,9 +1059,9 @@ public class NumberUtil { boolean allowSigns = false; boolean foundDigit = false; // deal with any possible sign up front - int start = (chars[0] == '-') ? 1 : 0; + int start = (chars[0] == '-' || chars[0] == '+') ? 1 : 0; if (sz > start + 1) { - if (chars[start] == '0' && chars[start + 1] == 'x') { + if (chars[start] == '0' && (chars[start + 1] == 'x' || chars[start + 1] == 'X')) { int i = start + 2; if (i == sz) { return false; // str == "0x" diff --git a/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java index e9ea70faa..4622f9eaa 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java @@ -66,6 +66,9 @@ public class NumberUtilTest { public void isNumberTest() { Assert.assertTrue(NumberUtil.isNumber("28.55")); Assert.assertTrue(NumberUtil.isNumber("0")); + Assert.assertTrue(NumberUtil.isNumber("+100.10")); + Assert.assertTrue(NumberUtil.isNumber("-22.022")); + Assert.assertTrue(NumberUtil.isNumber("0X22")); } @Test