其他的Java答案感觉有些问题,应该是没法通过所有的test cases。没有try catch 去获取exception的话会碰到java.lang.NumberFormatException。

import java.util.*;
public class Solution {
    public int compare (String version1, String version2) {
        // write code here
        if(version1==null||version2==null||version1.length()==0||version2.length()==0) return 0;
        String[] v1 = version1.split("\\.");
        String[] v2 = version2.split("\\.");
        //由于存在两版本长度不同的情况,先对比共有的区间,如果前缀全部相同,再对比多出来的部分
        int len = Math.min(v1.length,v2.length);
        for(int i=0;i<len;i++){
            v1[i]=stripZero(v1[i]);//去掉头部的0
            v2[i]=stripZero(v2[i]);//去掉头部的0
            if(v1[i].equals(v2[i])) continue;
            int n1=0, n2=0;
            try{ //如果能用int 去比较最好
                n1 = Integer.parseInt(v1[i]);
                n2 = Integer.parseInt(v2[i]);
            }catch(Exception e){ //不能用int 比较就用java string 的compareTo
                if(v1[i].compareTo(v2[i])>0){
                    return 1;
                }else if(v1[i].compareTo(v2[i])<0){
                    return -1;
                }else{
                    //return 0; 相同的跳出去比较下一个
                    continue;
                }
            }
            //对于能转化成int 的版本号则用int 大小去对比
            if(n1>n2){
                return 1;
            }else if(n1<n2){
                return -1;
            }else{
                //return 0;
                continue;
            }
        }
        //开始对比前缀相同但是长度不同的版本号
        if(v1.length>v2.length){ //版本号1 更长的时候
            for(int i=len;i<v1.length;i++){
                int n1 = 0;
                try{ //同样的逻辑,能转化int 就用int 去对比,不能的用string。如果是0 的话就对比下一位,如果不是0就返回1
                    n1 = Integer.parseInt(v1[i]);
                    if(n1==0) continue;
                    else return 1;
                }catch(Exception e){
                    return 1;
                }
            }
            return 0;
        }else if(v1.length<v2.length){ //版本号2 更长的时候
            for(int i=len;i<v2.length;i++){
                int n2 = 0;
                try{
                    n2 = Integer.parseInt(v2[i]);
                    if(n2==0) continue;
                    else return -1;
                }catch(Exception e){
                    return -1;
                }
            }
            return 0;
        }
        return 0;
    }

    //去掉字符串头部的0的函数
    public String stripZero(String s){
        int i=0;
        while(i<s.length()){
            if(s.charAt(i)=='0'){
                i++;
                continue;
            } 
            break;
        }
        return s.substring(i,s.length());

    }
}