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的辦法就不實用.