Java實現比較版本號碼,java實現版本號碼

來源:互聯網
上載者:User

Java實現比較版本號碼,java實現版本號碼

涉及到用戶端的系統中經常需要用到比較版本號碼的功能,但是比較版本號碼又不能完全按照字串比較的方式去用compareTo之類的方法;

這就需要我們總結版本號碼的通用規則,設計一個比較演算法並封裝成通用方法來使用:

通常版本好如:1.3.20.8,6.82.20160101,8.5a/8.5c等;

通用規則就是,先將版本字串按照點號分割,然後主要版本與主要版本比較、此版本與此版本比較,如此按序一級一級往後比較,直到有分出大小;

值得注意的是,很多比較版本號碼的方法都先將字串轉換成int或者double類型,這樣做未必通用,因為可能含有字母,如8.5c這樣的版本號碼;

通用的方式依然是將分割後的字串當做字串來比較,不過,比較字串之前,先比較位元;

比較版本號碼的方法樣本:

/** * 比較版本號碼的大小,前者大則返回一個正數,後者大返回一個負數,相等則返回0 * @param version1 * @param version2 * @return */public static int compareVersion(String version1, String version2) throws Exception {if (version1 == null || version2 == null) {throw new Exception("compareVersion error:illegal params.");}String[] versionArray1 = version1.split("\\.");//注意此處為正則匹配,不能用".";String[] versionArray2 = version2.split("\\.");int idx = 0;int minLength = Math.min(versionArray1.length, versionArray2.length);//取最小長度值int diff = 0;while (idx < minLength&& (diff = versionArray1[idx].length() - versionArray2[idx].length()) == 0//先比較長度&& (diff = versionArray1[idx].compareTo(versionArray2[idx])) == 0) {//再比較字元++idx;}//如果已經分出大小,則直接返回,如果未分出大小,則再比較位元,有子版本的為大;diff = (diff != 0) ? diff : versionArray1.length - versionArray2.length;return diff;}

注意:其中 split 方法入參為正則匹配運算式,不能用"."("."在Regex裡匹配任何值),需要用"\\.",才算是按點號分割;

這樣,先分割成子串數組,再挨個比較子版本號碼,比較子版本號碼時,先比較位元,位元大的就大,位元一樣時再按字串比較方式比較;

如果全部比較完(其中一個版本號碼比較完)之後,再看一下哪個版本號碼有更更多的子版本號碼,也就是分割後的數組長度,有子版本號碼的為大;

這樣就比較完善地考慮了各種情況,並比較出版本號碼大小;包括有字母后綴的也可以使用;

如 "9.9", "10.8.8.6" ,如果直接按字串比較,則會前者大,後者小,而明顯是錯誤的;分割後比較第一個主要版本9與10,從位元上,就已經得出結果後者大;

再如 "9.9b", "9.8a" 等也適用,如果用轉換成int或者double的方法就不適用;

歡迎指正!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.