zoukankan      html  css  js  c++  java
  • java比较版本号

    java比较版本号,比如1.0.3和1.2.1相比较考虑到可以用String的compareTo()方法,代码如下:

    public class MainClass {
        public static void main(String[] args) {    
    
            String version1 = "1.0.3";
            String version2 = "1.2.1";
            
            int compareTo = version1.compareTo(version2);
            
            System.out.println(compareTo);
                 
        }     
    }

    输出结果是-2,也就是说version1小,这是正确的。

    但是,这种情况仅限于小数点左右的数字位数相同,如果不相同,会出现一下情况:

    public class MainClass {
        public static void main(String[] args) {    
    
            String version1 = "5.2.3790.24123";
            String version2 = "5.11.7883";
            
            int compareTo = version1.compareTo(version2);
            
            System.out.println(compareTo);
        }    
    }

    这是输出结果是1,表示version1大,显然是错误的。

    所以,正常逻辑应该是以小数点分隔,对应位置上的数字比较大小,代码如下:

    public class MainClass {
        /**
         * 比较版本号的大小,前者大则返回一个正数,后者大返回一个负数,相等则返回0 
         */
        public static void main(String[] args) {    
            String version1 = "5.2.3790.24123";
            String version2 = "5.11.7883";
            
            String[] split1 = version1.split("\.");  //以.分隔需要转义
            String[] split2 = version2.split("\.");
            
            int length=Math.min(split1.length, split2.length);
            int diff=0;
            for(int i=0;i<length;i++){
                diff = split1[i].length()-split2[i].length();
                if(diff==0){   //位数相同时,比较大小
                    if(split1[i].compareTo(split2[i])>0){
                        System.out.println("1");
                        break;
                    }else if(split1[i].compareTo(split2[i])<0){
                        System.out.println("-1");
                        break;
                    }else if(i==length-1){
                        System.out.println(length==split1.length? -1 : 1);
                    }
                    
                }else if(diff !=0){  //位数不同时,直接输出
                    System.out.println(diff);
                    break;
                }
                
            }
        }    
    }
  • 相关阅读:
    python和web框架面试题目整理(2)
    Linux系统运维面试题目整理(1)
    python和web框架面试题目整理(1)
    2018-7-11 Django REST API小试牛刀
    2018-4-27 python实现systemd进程后台运行任务
    从git中删除.idea目录
    springboot中的banner素材
    IpUtils获取用户请求真实ip工具类
    导出sqlserver数据库设计语句
    nginx: [emerg] unknown directive "if(!-e" 错误解决
  • 原文地址:https://www.cnblogs.com/doufuquanjia/p/5824736.html
Copyright © 2011-2022 走看看