監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

Java實(shí)現(xiàn)比較版本號

申請免費(fèi)試用、咨詢電話:400-8352-114

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

  這就需要我們總結(jié)版本號的通用規(guī)則,設(shè)計(jì)一個比較算法并封裝成通用方法來使用:

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

  通用規(guī)則就是,先將版本字符串按照點(diǎn)號分割,然后主版本與主版本比較、此版本與此版本比較,如此按序一級一級往后比較,直到有分出大??;

  值得注意的是,很多比較版本號的方法都先將字符串轉(zhuǎn)換成int或者double類型,這樣做未必通用,因?yàn)榭赡芎凶帜福?.5c這樣的版本號;

  通用的方式依然是將分割后的字符串當(dāng)做字符串來比較,不過,比較字符串之前,先比較位數(shù);

  比較版本號的方法示例:

[java]view plaincopy

  

  • /**

  • *比較版本號的大小,前者大則返回一個正數(shù),后者大返回一個負(fù)數(shù),相等則返回0

  • *@paramversion1

  • *@paramversion2

  • *@return

  • */

  •   publicstaticintcompareVersion(Stringversion1,Stringversion2)throwsException{

  •   if(version1==null||version2==null){

  •   thrownewException("compareVersionerror:illegalparams.");

  • }

  •   String[]versionArray1=version1.split(".");//注意此處為正則匹配,不能用".";

  •   String[]versionArray2=version2.split(".");

  •   intidx=0;

  •   intminLength=Math.min(versionArray1.length,versionArray2.length);//取最小長度值

  •   intdiff=0;

  •   while(idx<minLength

  • &&(diff=versionArray1[idx].length()-versionArray2[idx].length())==0//先比較長度

  • &&(diff=versionArray1[idx].compareTo(versionArray2[idx]))==0){//再比較字符

  • ++idx;

  • }

  • //如果已經(jīng)分出大小,則直接返回,如果未分出大小,則再比較位數(shù),有子版本的為大;

  •   diff=(diff!=0)?diff:versionArray1.length-versionArray2.length;

  •   returndiff;

  • }

  • 注意:其中split 方法入?yún)檎齽t匹配表達(dá)式,不能用"."("."在正則表達(dá)式里匹配任何值),需要用".",才算是按點(diǎn)號分割;

  這樣,先分割成子串?dāng)?shù)組,再挨個比較子版本號,比較子版本號時(shí),先比較位數(shù),位數(shù)大的就大,位數(shù)一樣時(shí)再按字符串比較方式比較;

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

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

  如"9.9", "10.8.8.6" ,如果直接按字符串比較,則會前者大,后者小,而明顯是錯誤的;分割后比較第一個主版本9與10,從位數(shù)上,就已經(jīng)得出結(jié)果后者大;

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

發(fā)布:2007-04-07 16:32    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:

泛普微信營銷軟件其他應(yīng)用

微營銷 微信推廣 微信營銷軟件 微信二維碼 微信商城 微信支付 微信開店 微信公眾平臺 微信公眾號 微信公眾平臺登錄 微信怎么玩 微信認(rèn)證 下載微信到手機(jī) 手機(jī)微信 微信官網(wǎng) 微信網(wǎng)頁版 電腦微信 微信電腦版 微信公眾平臺注冊 微信注冊 微信公眾號申請