From 5df769de0e2b9c83c3ae9d31f7dfeb55adb75b08 Mon Sep 17 00:00:00 2001 From: xiejiayu Date: Fri, 21 Jul 2023 14:15:46 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=AF=94=E8=BE=83=E5=99=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20compare("1.0.3",=20"1.0.2a")=20>=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/comparator/VersionComparator.java | 12 ++++++++++++ .../core/comparator/VersionComparatorTest.java | 6 ++++++ 2 files changed, 18 insertions(+) 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 834123c44..7538f8677 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 @@ -1,7 +1,10 @@ package cn.hutool.core.comparator; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.PatternPool; import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import java.io.Serializable; @@ -41,6 +44,7 @@ public class VersionComparator implements Comparator, Serializable { * compare("v1", null) > 0 * compare("1.0.0", "1.0.2") < 0 * compare("1.0.2", "1.0.2a") < 0 + * compare("1.0.3", "1.0.2a") > 0 * compare("1.13.0", "1.12.1c") > 0 * compare("V0.0.20170102", "V0.0.20170101") > 0 * @@ -75,6 +79,14 @@ public class VersionComparator implements Comparator, Serializable { diff = v1.length() - v2.length(); if (0 == diff) { diff = v1.compareTo(v2); + }else { + //不同长度的先比较前面的数字;前面数字不相等时,按数字大小比较;数字相等的时候,继续按长度比较, + int v1Num = Convert.toInt(ReUtil.get(PatternPool.NUMBERS, v1, 0), 0); + int v2Num = Convert.toInt(ReUtil.get(PatternPool.NUMBERS, v2, 0), 0); + int diff1 = v1Num - v2Num; + if (diff1 != 0) { + diff = diff1; + } } if(diff != 0) { //已有结果,结束 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 470735acc..f00f93b33 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 @@ -53,4 +53,10 @@ public class VersionComparatorTest { VersionComparator other = new VersionComparator(); Assert.assertNotEquals(first, other); } + + @Test + public void versionComparatorTest7() { + int compare = VersionComparator.INSTANCE.compare("1.12.2", "1.12.1c"); + Assert.assertTrue(compare > 0); + } }