SplitUsage

split的用法示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class Version {
/**
* 请根据语义化版本的要求 https://semver.org/lang/zh-CN/ ,比较两个"语义化版本"
*
* <p>传入两个形如x.y.z的字符串,比较两个语义化版本的大小。如果version1小于version2,返回-1;如果version1大于
* version2,返回1。如果二者相等,返回0。
*
* <p>注意,如果传入的字符串形如x,则其等价于x.0.0。 如果传入的字符串形如x.y,则其等价于x.y.0。
*
* @param version1 传入的版本字符串1,支持x/x.y/x.y.z,你可以假定传入的字符串一定是合法的语义化版本
* @param version2 传入的版本字符串2,支持x/x.y/x.y.z,你可以假定传入的字符串一定是合法的语义化版本
* @return -1/0/1 当version1 小于/等于/大于 version2时
*/
public static int compare(String version1, String version2) {
ArrayList<String> versionArr1 = new ArrayList<>(Arrays.asList(version1.split("\\.")));
ArrayList<String> versionArr2 = new ArrayList<>(Arrays.asList(version2.split("\\.")));

ArrayList<Integer> versionIntArr1 = new ArrayList<>();
ArrayList<Integer> versionIntArr2 = new ArrayList<>();

for (String v1 : versionArr1) {
versionIntArr1.add(Integer.parseInt(v1));
}
for (String v2 : versionArr2) {
versionIntArr2.add(Integer.parseInt(v2));
}

int length = Math.max(versionIntArr1.size(), versionIntArr2.size());

while (versionIntArr1.size() < length) {
versionIntArr1.add(0);
}

while (versionIntArr2.size()<length) {
versionIntArr2.add(0);
}

for (int i = 0; i < length; i++) {
if (versionIntArr1.get(i) < versionIntArr2.get(i)) {
return -1;
} else if (versionIntArr1.get(i) > versionIntArr2.get(i)) {
return 1;
}
}
return 0;
}

public static void main(String[] args) {

}
}