diff --git a/CHANGELOG.md b/CHANGELOG.md index d4f70dee8..82628bad3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.8.1.M1 (2022-05-16) +# 5.8.1 (2022-05-16) ### 🐣新特性 * 【core 】 BooleanUtil增加toBooleanObject方法(issue#I56AG3@Gitee) @@ -12,6 +12,7 @@ * 【core 】 新增CastUtil(pr#2313@Github) * 【core 】 ByteUtil新增bytesToShort重载(issue#I57FA7@Gitee) * 【core 】 ReflectUtil.invoke方法抛出运行时异常增加InvocationTargetRuntimeException(issue#I57GI2@Gitee) +* 【core 】 NumberUtil.parseNumber支持16进制(issue#2328@Github) * ### 🐞Bug修复 * 【core 】 MapUtil.map对null友好,且修复了测试用例中分组问题(pr#614@Gitee) 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 3deccb27a..5b40c361f 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java @@ -2524,6 +2524,11 @@ public class NumberUtil { * @since 4.1.15 */ public static Number parseNumber(String numberStr) throws NumberFormatException { + if(StrUtil.startWithIgnoreCase(numberStr, "0x")){ + // 0x04表示16进制数 + return Long.parseLong(numberStr.substring(2), 16); + } + try { final NumberFormat format = NumberFormat.getInstance(); if (format instanceof DecimalFormat) { 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 489a3faf8..f3a8e4859 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 @@ -292,6 +292,13 @@ public class NumberUtilTest { Assert.assertEquals(1482L, v2.longValue()); } + @Test + public void parseHexNumberTest() { + // 千位分隔符去掉 + final int v1 = NumberUtil.parseNumber("0xff").intValue(); + Assert.assertEquals(255, v1); + } + @Test public void parseLongTest() { long number = NumberUtil.parseLong("0xFF");