首先按照 \. 将两个字符串分割成两个字符串数组。
依次处理两个数组中的每个字符串,因为字符串长度可能超出 long 的取值范围所以不能使用 Long.parseLong() 将字符串转化成 long 进行比较。先将字符串头部的0清除,然后比较两个字符串的长度,长度长的自然是大值,就可以得到结果。当两个字符串长度一样时,需要从最高位开始比较。
public int compare (String version1, String version2) {
// write code here
String[] c1 = version1.split("\\.");
String[] c2 = version2.split("\\.");
int len1 = c1.length;
int len2 = c2.length;
int index = 0;
while (index < len1 && index < len2) {
String s1 = c1[index];
String s2 = c2[index];
int i = 0;
int j = 0;
while (i < s1.length()) {
if (s1.charAt(i) == '0') {
i++;
} else {
break;
}
}
s1 = i == s1.length() ? "0" : s1.substring(i);
while (j < s2.length()) {
if (s2.charAt(j) == '0') {
j++;
} else {
break;
}
}
s2 = j == s2.length() ? "0" : s2.substring(j);
if (s1.length() > s2.length()) {
return 1;
} else if (s1.length() < s2.length()) {
return -1;
}
i = 0;
while (i < s1.length()) {
if (s1.charAt(i) - s2.charAt(i) > 0) {
return 1;
} else if (s1.charAt(i) - s2.charAt(i) < 0) {
return -1;
}
i++;
}
index++;
}
while(index < len1 && Long.parseLong(c1[index]) == 0) {
index++;
}
if(index < len1) {
return 1;
}
while(index < len2 && Long.parseLong(c2[index]) == 0) {
index++;
}
if(index < len2) {
return -1;
}
return 0;
}
京公网安备 11010502036488号