gpt4 book ai didi

用于显示两个给定值中较高版本的Java代码

转载 作者:行者123 更新时间:2023-11-30 06:06:13 24 4
gpt4 key购买 nike

用于显示两个给定值中较高版本的 Java 代码。

Version1=7.3.4.2.5.9
Version2=7.3.2.3.8.1

它应该返回版本 1 的值,因为它大于版本 2。

我尝试根据.(点)分割数字,然后一一比较。但这似乎不是一个好办法。还有其他方法或建议吗?

我的方法

class App {
public static void main(String args[]) {
String Version1 = "7.3.4.02.5.9";
String Version2 = "7.3.4.3.8.1";
String[] v1Split = Version1.split("\\.");
String[] v2Split = Version2.split("\\.");

for (int i = 0; i < v1Split.length; i++) {
if (v2Split != null) {
int v1 = Integer.parseInt(v1Split[i]);
int v2 = Integer.parseInt(v2Split[i]);
if (v1 > v2) {
System.out.println(Version1);
break;
}
if (v2 > v1) {
System.out.println(Version2);
break;
}
if (v1 == v2)
continue;
}
}
}

}

最佳答案

您可以实现一个比较器,它将每个版本字符串分成几个部分,然后逐个比较相同位置的部分,返回第一个不等式。如果所有现有位置的零件都相等,则零件越多的版本越大:

"1.2" < "1.3" < "1.3.1" == "1.3.1" < "1.3.1.1" < "1.4"

这是这样的比较器:

class VersionComparator implements Comparator<String> {
@Override
public int compare(String version1, String version2) {
List<String> v1 = Arrays.asList(version1.split("\\."));
List<String> v2 = Arrays.asList(version2.split("\\."));
return IntStream.range(0, Math.min(v1.size(), v2.size()))
.map(i -> Integer.valueOf(v1.get(i)).compareTo(Integer.valueOf(v2.get(i))))
.filter(i -> i != 0)
.findFirst()
.orElse(Integer.compare(v1.size(), v2.size()));
}
}

示例和工作证明:

public static void main(String[] args) {
String[] versions = new String[]{
"7.3.4.2.5.9",
"7.3.2.3.8.1",
"7.2",
"7.3.0",
"7.13.0",
"6.4.2.3.5",
"7.3.2.3",
"7.3.4.2.5.9.1",
};

Stream.of(versions)
.sorted(new VersionComparator())
.forEach(System.out::println);
}

结果:

6.4.2.3.5
7.2
7.3.0
7.3.2.3
7.3.2.3.8.1
7.3.4.2.5.9
7.3.4.2.5.9.1
7.13.0

关于用于显示两个给定值中较高版本的Java代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44719517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com