gpt4 book ai didi

java - 理解一段代码用于不同的场景

转载 作者:行者123 更新时间:2023-12-01 12:44:31 25 4
gpt4 key购买 nike

有人可以解释一下这段代码是如何工作的吗:

enum MyStringComparator implements Comparator<String> {
INSTANCE;

@Override
public int compare(String s1, String s2) {
int n1 = Integer.parseInt(s1.split("\\.")[2]);
int n2 = Integer.parseInt(s2.split("\\.")[2]);
return Integer.compare(n1, n2);
}
}

我正在尝试排序

"7.0.x",
"14.0.x",
"13.0.x-version_4",

所以根据我的理解,我想在 x 处拆分并看看之前是什么?

因此我尝试了以下方法:

enum MyStringComparator implements Comparator<String> {
INSTANCE;

@Override
public int compare(String s1, String s2) {
int n1 = Integer.parseInt(s1.split("\\.\\.x")[5]);
int n2 = Integer.parseInt(s2.split("\\.\\.x")[5]);
return Integer.compare(n1, n2);
}
}

这不起作用,因为我遇到了数字格式异常。我相信我只是不明白代码的作用。

最佳答案

第一段代码查看每个字符串的第三个组成部分,按点分割后,然后将它们转换为整数,并进行比较。

但是,在您的情况下,由于第三个组成部分是 x,它不是数字,因此这不起作用。如果您想比较前两个组件,您必须执行以下操作:

String[] parts1 = s1.split("\\.");
String[] parts2 = s2.split("\\.");
int comparison = Integer.compare(Integer.parseInt(parts1[0]), Integer.parseInt(parts2[0]));
if (comparison == 0) {
comparison = Integer.compare(Integer.parseInt(parts1[1]), Integer.parseInt(parts2[1]));
}
return comparison;

如果您使用的是 Guava,请执行以下操作:

String[] parts1 = s1.split("\\.");
String[] parts2 = s2.split("\\.");
return ComparisonChain.start()
.compare(Integer.parseInt(parts1[0]), Integer.parseInt(parts2[0]))
.compare(Integer.parseInt(parts1[1]), Integer.parseInt(parts2[1]))
.result();

关于java - 理解一段代码用于不同的场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24826910/

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