java版本号分段比较_Java实现比较版本号
涉及到客戶端的系統(tǒng)中經(jīng)常需要用到比較版本號(hào)的功能,但是比較版本號(hào)又不能完全按照字符串比較的方式去用compareTo之類的方法;
這就需要我們總結(jié)版本號(hào)的通用規(guī)則,設(shè)計(jì)一個(gè)比較算法并封裝成通用方法來(lái)使用:
通常版本號(hào)如:1.3.20.8,6.82.20160101,8.5a/8.5c等;
通用規(guī)則就是,先將版本字符串按照點(diǎn)號(hào)分割,然后主版本與主版本比較、此版本與此版本比較,如此按序一級(jí)一級(jí)往后比較,直到有分出大小;
值得注意的是,很多比較版本號(hào)的方法都先將字符串轉(zhuǎn)換成int或者double類型,這樣做未必通用,因?yàn)榭赡芎凶帜?#xff0c;如8.5c這樣的版本號(hào);
通用的方式依然是將分割后的字符串當(dāng)做字符串來(lái)比較,不過,比較字符串之前,先比較位數(shù);
比較版本號(hào)的方法示例:
/**
*?比較版本號(hào)的大小,前者大則返回一個(gè)正數(shù),后者大返回一個(gè)負(fù)數(shù),相等則返回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);//取最小長(zhǎng)度值
int?diff?=?0;
while?(idx?
&&?(diff?=?versionArray1[idx].length()?-?versionArray2[idx].length())?==?0//先比較長(zhǎng)度
&&?(diff?=?versionArray1[idx].compareTo(versionArray2[idx]))?==?0)?{//再比較字符
++idx;
}
//如果已經(jīng)分出大小,則直接返回,如果未分出大小,則再比較位數(shù),有子版本的為大;
diff?=?(diff?!=?0)???diff?:?versionArray1.length?-?versionArray2.length;
return?diff;
}
注意:其中?split 方法入?yún)檎齽t匹配表達(dá)式,不能用"."("."在正則表達(dá)式里匹配任何值),需要用"\\.",才算是按點(diǎn)號(hào)分割;
這樣,先分割成子串?dāng)?shù)組,再挨個(gè)比較子版本號(hào),比較子版本號(hào)時(shí),先比較位數(shù),位數(shù)大的就大,位數(shù)一樣時(shí)再按字符串比較方式比較;
如果全部比較完(其中一個(gè)版本號(hào)比較完)之后,再看一下哪個(gè)版本號(hào)有更更多的子版本號(hào),也就是分割后的數(shù)組長(zhǎng)度,有子版本號(hào)的為大;
這樣就比較完善地考慮了各種情況,并比較出版本號(hào)大小;包括有字母后綴的也可以使用;
如?"9.9", "10.8.8.6" ,如果直接按字符串比較,則會(huì)前者大,后者小,而明顯是錯(cuò)誤的;分割后比較第一個(gè)主版本9與10,從位數(shù)上,就已經(jīng)得出結(jié)果后者大;
再如?"9.9b", "9.8a" 等也適用,如果用轉(zhuǎn)換成int或者double的方法就不適用;
歡迎指正!
http://blog.csdn.net/sowhat_ah/article/details/43955337
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的java版本号分段比较_Java实现比较版本号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SWIFT推送之本地推送(UILocal
- 下一篇: linux耳机的检测原理,耳机检测原理介