最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 實(shí)現(xiàn)比較版本號(hào)功能

 更新時(shí)間:2016年07月07日 11:00:36   投稿:lqh  
本篇文章主要介紹了java 中涉及到客戶端的系統(tǒng)經(jīng)常需要用到比較版本號(hào)的功能,并附小示例,希望能幫助需要的小伙伴

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

這就需要我們總結(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類(lèi)型,這樣做未必通用,因?yàn)榭赡芎凶帜?,?.5c這樣的版本號(hào);

通用的方式依然是將分割后的字符串當(dāng)做字符串來(lái)比較,不過(guò),比較字符串之前,先比較位數(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 < minLength 
      && (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的方法就不適用.

相關(guān)文章

  • Mybatis和Mybatis-Plus時(shí)間范圍查詢方式

    Mybatis和Mybatis-Plus時(shí)間范圍查詢方式

    這篇文章主要介紹了Mybatis和Mybatis-Plus時(shí)間范圍查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中常見(jiàn)的查找算法與排序算法總結(jié)

    Java中常見(jiàn)的查找算法與排序算法總結(jié)

    數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)存儲(chǔ)的方式,算法是數(shù)據(jù)計(jì)算的方式。所以在開(kāi)發(fā)中,算法和數(shù)據(jù)結(jié)構(gòu)息息相關(guān)。本文為大家整理了Java中常見(jiàn)的查找與排序算法的實(shí)現(xiàn),需要的可以參考一下
    2023-03-03
  • java圖形界面之加法計(jì)算器

    java圖形界面之加法計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了java圖形界面之加法計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Spring中依賴注入(DI)幾種方式解讀

    Spring中依賴注入(DI)幾種方式解讀

    這篇文章主要介紹了Spring中依賴注入(DI)幾種方式解讀,構(gòu)造器依賴注入通過(guò)容器觸發(fā)一個(gè)類(lèi)的構(gòu)造器來(lái)實(shí)現(xiàn)的,該類(lèi)有一系列參數(shù),每個(gè)參數(shù)代表一個(gè)對(duì)其他類(lèi)的依賴,需要的朋友可以參考下
    2024-01-01
  • Java程序生成Access文件代碼實(shí)例

    Java程序生成Access文件代碼實(shí)例

    這篇文章主要介紹了Java程序生成Access文件代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java中的Object類(lèi)的toSpring()方法

    java中的Object類(lèi)的toSpring()方法

    這篇文章主要介紹了java中的Object類(lèi)的toSpring()方法,Object是類(lèi)層次結(jié)構(gòu)的根,每個(gè)類(lèi)都可以將Object作為超類(lèi)。所有類(lèi)都直接或者間接的繼承自該類(lèi),下文相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 解決Maven本地倉(cāng)庫(kù)明明有對(duì)應(yīng)的jar包但還是報(bào)找不到的問(wèn)題

    解決Maven本地倉(cāng)庫(kù)明明有對(duì)應(yīng)的jar包但還是報(bào)找不到的問(wèn)題

    這篇文章主要介紹了解決Maven本地倉(cāng)庫(kù)明明有對(duì)應(yīng)的jar包但還是報(bào)找不到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • java中判斷String類(lèi)型為空和null的幾種方法

    java中判斷String類(lèi)型為空和null的幾種方法

    判斷一個(gè)字符串是否為空或者為null是一個(gè)常見(jiàn)的操作,本文主要介紹了java中判斷String類(lèi)型為空和null的幾種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • 一種新的日期處理方式之JavaScript Temporal API

    一種新的日期處理方式之JavaScript Temporal API

    JavaScript Temporal API是一種為Web開(kāi)發(fā)人員提供了一種新的處理日期和時(shí)間數(shù)據(jù)類(lèi)型的方式。它的目的是使操作日期和時(shí)間更加簡(jiǎn)單和可靠,而且不用擔(dān)心歷史時(shí)區(qū)問(wèn)題或全球化協(xié)調(diào)時(shí)間(UTC)之類(lèi)的問(wèn)題,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Liquibase結(jié)合SpringBoot使用實(shí)現(xiàn)數(shù)據(jù)庫(kù)管理功能

    Liquibase結(jié)合SpringBoot使用實(shí)現(xiàn)數(shù)據(jù)庫(kù)管理功能

    Liquibase 是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)管理工具,它幫助你通過(guò)自動(dòng)化管理數(shù)據(jù)庫(kù)的變更、版本控制、和回滾,簡(jiǎn)化了開(kāi)發(fā)中的數(shù)據(jù)庫(kù)遷移工作,這篇文章主要介紹了Liquibase結(jié)合SpringBoot使用實(shí)現(xiàn)數(shù)據(jù)庫(kù)管理,需要的朋友可以參考下
    2024-12-12

最新評(píng)論

稻城县| 巫溪县| 和硕县| 陆良县| 虞城县| 固原市| 涞水县| 克山县| 樟树市| 巩义市| 资兴市| 台山市| 许昌县| 茌平县| 建始县| 县级市| 嘉义县| 越西县| 祁阳县| 岱山县| 齐齐哈尔市| 扬州市| 兰西县| 西城区| 绥阳县| 郎溪县| 灯塔市| 班戈县| 东莞市| 鄂托克前旗| 南郑县| 磐安县| 定日县| 长泰县| 华蓥市| 靖江市| 瓮安县| 芦溪县| 龙门县| 沁水县| 六盘水市|