From b146c90309b30e35abafecf6ec646116350e208d Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 21 Jul 2023 18:16:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DVersionComparator=E5=AF=B91.0?= =?UTF-8?q?.3=E5=8F=8A1.0.2a=E6=AF=94=E8=BE=83=E6=9C=89=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/core/comparator/VersionComparator.java | 12 ++++++++++++ .../core/comparator/VersionComparatorTest.java | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/comparator/VersionComparator.java b/hutool-core/src/main/java/org/dromara/hutool/core/comparator/VersionComparator.java index 02fc66928..29c2bf5f1 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/comparator/VersionComparator.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/comparator/VersionComparator.java @@ -12,6 +12,9 @@ package org.dromara.hutool.core.comparator; +import org.dromara.hutool.core.convert.Convert; +import org.dromara.hutool.core.regex.PatternPool; +import org.dromara.hutool.core.regex.ReUtil; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.text.split.SplitUtil; import org.dromara.hutool.core.util.ObjUtil; @@ -87,6 +90,15 @@ public class VersionComparator implements Comparator, Serializable { diff = v1.length() - v2.length(); if (0 == diff) { diff = v1.compareTo(v2); + }else { + // https://gitee.com/dromara/hutool/pulls/1043 + //不同长度的先比较前面的数字;前面数字不相等时,按数字大小比较;数字相等的时候,继续按长度比较, + final int v1Num = Convert.toInt(ReUtil.get(PatternPool.NUMBERS, v1, 0), 0); + final int v2Num = Convert.toInt(ReUtil.get(PatternPool.NUMBERS, v2, 0), 0); + final int diff1 = v1Num - v2Num; + if (diff1 != 0) { + diff = diff1; + } } if(diff != 0) { //已有结果,结束 diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/comparator/VersionComparatorTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/comparator/VersionComparatorTest.java index 91cbb4dde..981bb4dd7 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/comparator/VersionComparatorTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/comparator/VersionComparatorTest.java @@ -53,4 +53,10 @@ public class VersionComparatorTest { final VersionComparator other = new VersionComparator(); Assertions.assertNotEquals(first, other); } + + @Test + public void versionComparatorTest7() { + final int compare = VersionComparator.INSTANCE.compare("1.12.2", "1.12.1c"); + Assertions.assertTrue(compare > 0); + } }