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