首先按照 \. 将两个字符串分割成两个字符串数组。
依次处理两个数组中的每个字符串,因为字符串长度可能超出 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; }