版本號(hào)生成-根據(jù)當(dāng)前版本號(hào)生成新的版本號(hào)

世上無(wú)難事,只怕有心人!大家好,我是愛學(xué)習(xí)的小黃牛。今天為大家分享的是 如何生成版本號(hào)。在工作中時(shí)常會(huì)遇到各種版本更新的要求,最近我參與的項(xiàng)目就遇到這個(gè)問(wèn)題。

基礎(chǔ)需求:

根據(jù)當(dāng)前版本號(hào)生成新的版本號(hào): 例如 根據(jù)1.0.2 生成 1.0.3,相信有很多方式可以實(shí)現(xiàn)。接下來(lái)讓各位看看我的實(shí)現(xiàn)方式。

實(shí)現(xiàn)的基本思路:

1.先將字符串 以點(diǎn)(.),分割成數(shù)組 ,注意在使用split("\.") ,而非split(".")

2.將String[] 每個(gè)值,轉(zhuǎn)成Integer 反向順序存到List<Integer> 中

3.循環(huán)對(duì)List<Integer>中的元素進(jìn)行判斷 ,如第一個(gè)值(即末尾的值)加1之后,未達(dá)到100,那么將當(dāng)前的位置的值 存入加1后的值,carry=0,(carry是用來(lái)代表進(jìn)位的,1代表有進(jìn)位,0代表沒(méi)有進(jìn)位),并循環(huán)終止break;相反,若達(dá)到100,需要繼續(xù)循環(huán)下一位置的數(shù),carry=1,當(dāng)前位置的值變?yōu)?;根據(jù)上述規(guī)則執(zhí)行循環(huán)。

4.循環(huán)結(jié)束后,根據(jù)carry判斷是否有進(jìn)位,若任然有進(jìn)位,則在List<Integer> 尾部添加新值1;

  1. 最后從高位,遍歷List<Integer>并按照相應(yīng)的值賦值出來(lái)。

具體實(shí)現(xiàn):

/**
     * 功能描述:得到下一次版本號(hào)
     * @param versionCode 當(dāng)前版本號(hào)
     * @return String 返回新版本號(hào) 字符串類型
     * @author 愛學(xué)習(xí)的小黃牛
     * @date 
     * @修改日志:
     */
    private static String getNextVersionCode(String versionCode)
    {
        String[] vNumber = versionCode.split("\\."); //點(diǎn) | 這些要使用轉(zhuǎn)義符
        List<Integer> vList = new ArrayList<Integer>(); 
        int vNumberLength = vNumber.length;
        for(int i=vNumberLength-1;i>=0;i--) {
            vList.add(Integer.parseInt(vNumber[i]));
        }
        
        int carry = 0; // 0表示沒(méi)有進(jìn)位
        for(int i = 0;i<vList.size();i++) {
            int currentNum  = vList.get(i);
            currentNum = currentNum + 1;
            if(currentNum>=100) { //進(jìn)一位
                carry=1;
                vList.set(i, 0); //此位置賦值0;
            }else{
                carry=0; 
                vList.set(i, currentNum); //此位置賦值為新增1 并終止循環(huán)
                break;
            }
        }
        if(carry==1) { //如果最后還有進(jìn)位,增加高位
            vList.add(1);
        }
        //最后倒敘輸出所有的值組成新的版本號(hào)
        String versionCodeNew = "";
        int vListSize = vList.size();
        for(int i=vListSize-1;i>=0;i--) {
            log4j.debug(vList.get(i));
            versionCodeNew = i==0?versionCodeNew+vList.get(i):versionCodeNew+vList.get(i)+".";      
        }
        return versionCodeNew;
    }

時(shí)間苒苒,代碼雖小,優(yōu)化的東西有很多,各位看官,記得摸索哦!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首頁(yè) 資訊 文章 資源 小組 相親 登錄 注冊(cè) 首頁(yè) 最新文章 IT 職場(chǎng) 前端 后端 移動(dòng)端 數(shù)據(jù)庫(kù) 運(yùn)維 其他...
    Helen_Cat閱讀 4,151評(píng)論 1 10
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,911評(píng)論 0 13
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,208評(píng)論 0 9
  • 在一個(gè)頁(yè)面中,有許多的控件(元素或標(biāo)簽)。為了更方便的操作這些標(biāo)簽,就需要給這些標(biāo)簽標(biāo)識(shí)一個(gè)身份牌。 1.Name...
    夏有清風(fēng)丶閱讀 519評(píng)論 0 0
  • 今天是我又一次報(bào)名參加寫作班培訓(xùn),這是第三次交錢參與培訓(xùn)寫作,前一次和第二次都是交錢參與弘丹老師的“弘丹在寫作”、...
    熊僈伶閱讀 548評(píng)論 0 0

友情鏈接更多精彩內(nèi)容