From 3aa9bdfcfa6a79f2805e641157e4692627c23478 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 12 Jun 2024 00:31:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DVersionComparator=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=E7=A9=BA=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 +++-- .../hutool/core/comparator/VersionComparator.java | 4 ++-- .../src/main/java/cn/hutool/core/lang/Version.java | 8 +++++--- .../core/comparator/VersionComparatorTest.java | 14 +++++++++++--- 4 files changed, 21 insertions(+), 10 deletions(-) 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");