diff --git a/CHANGELOG.md b/CHANGELOG.md index 72467641d..9d071a09c 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.29(2024-06-07) +# 5.8.29(2024-06-12) ### 🐣新特性 * 【core 】 DateUtil增加offsetYear方法 @@ -11,7 +11,8 @@ ### 🐞Bug修复 * 【core 】 修复AnnotationUtil可能的空指针错误 -* 【core 】 修复BeanUtil.isBean判断Dict错误问题(issue#I9VTZG@gitee) +* 【core 】 修复BeanUtil.isBean判断Dict错误问题(issue#I9VTZG@Gitee) +* 【core 】 修复VersionComparator传入空字符串报错问题(pr#3614@Github) ------------------------------------------------------------------------------------------------------------- # 5.8.28(2024-05-29) diff --git a/hutool-core/src/main/java/cn/hutool/core/comparator/VersionComparator.java b/hutool-core/src/main/java/cn/hutool/core/comparator/VersionComparator.java index d1ddad714..98df7a2d1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/comparator/VersionComparator.java +++ b/hutool-core/src/main/java/cn/hutool/core/comparator/VersionComparator.java @@ -57,9 +57,9 @@ public class VersionComparator implements Comparator, Serializable { } if (version1 == null && version2 == null) { return 0; - } else if (version1 == null || "".equals(version1)) {// null或""视为最小版本,排在前 + } else if (version1 == null) {// null或""视为最小版本,排在前 return -1; - } else if (version2 == null || "".equals(version2)) { + } else if (version2 == null) { return 1; } diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Version.java b/hutool-core/src/main/java/cn/hutool/core/lang/Version.java index 1075bf466..f24461ff3 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Version.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Version.java @@ -60,14 +60,16 @@ public class Version implements Comparable, Serializable { public Version(final String v) { Assert.notNull(v, "Null version string"); final int n = v.length(); - if (n == 0){ - throw new IllegalArgumentException("Empty version string"); - } + this.version = v; this.sequence = new ArrayList<>(4); this.pre = new ArrayList<>(2); this.build = new ArrayList<>(2); + if (n == 0){ + return; + } + int i = 0; char c = v.charAt(i); // 不检查开头字符为数字,字母按照字典顺序的数字对待 diff --git a/hutool-core/src/test/java/cn/hutool/core/comparator/VersionComparatorTest.java b/hutool-core/src/test/java/cn/hutool/core/comparator/VersionComparatorTest.java index a8afe0cf7..b542813db 100644 --- a/hutool-core/src/test/java/cn/hutool/core/comparator/VersionComparatorTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/comparator/VersionComparatorTest.java @@ -3,9 +3,6 @@ package cn.hutool.core.comparator; import org.junit.Assert; import org.junit.Test; -import java.util.Arrays; -import java.util.stream.Collectors; - /** * 版本比较单元测试 * @@ -13,6 +10,17 @@ import java.util.stream.Collectors; */ public class VersionComparatorTest { + @Test + public void compareEmptyTest() { + int compare = VersionComparator.INSTANCE.compare("", "1.12.1"); + Assert.assertTrue(compare < 0); + + compare = VersionComparator.INSTANCE.compare("", null); + Assert.assertTrue(compare > 0); + compare = VersionComparator.INSTANCE.compare(null, ""); + Assert.assertTrue(compare < 0); + } + @Test public void versionComparatorTest1() { int compare = VersionComparator.INSTANCE.compare("1.2.1", "1.12.1");