世上無(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;
- 最后從高位,遍歷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)化的東西有很多,各位看官,記得摸索哦!