程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java 完成比擬版本號功效

java 完成比擬版本號功效

編輯:關於JAVA

java 完成比擬版本號功效。本站提示廣大學習愛好者:(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 辦法入參為正則婚配表達式,不克不及用"."("."在正則表達式裡婚配任何值),須要用"\\.",才算是按點號朋分;

如許,先朋分成子串數組,再挨個比擬子版本號,比擬子版本號時,先比擬位數,位數年夜的就年夜,位數一樣時再按字符串比擬方法比擬;

假如全體比擬完(個中一個版本號比擬完)以後,再看一下哪一個版本號有更更多的子版本號,也就是朋分後的數組長度,有子版本號的為年夜;

如許就比擬完美地斟酌了各類情形,並比擬出書本號年夜小;包含有字母後綴的也能夠應用;

如 "9.9", "10.8.8.6" ,假如直接按字符串比擬,則會前者年夜,後者小,而顯著是毛病的;朋分後比擬第一個主版本9與10,從位數上,就曾經得出成果後者年夜;

再如 "9.9b", "9.8a" 等也實用,假如用轉換成int或許double的辦法就不實用.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved