下面是比较的方法,只要把两个参数传递进去就ok了。根据返回的int值进行处理
/**
* 比较两个版本名称
* 1.1.4 和 1.1.21去除空格,用.分割
* 1.2.1 和 1.1.987
* 1.2 和 1.1.987
* 2 和 1.1.987
* 返回值:0-参数无效无法比,1-相等,2-左边大,3-右边大
*/
public int CompareVersionName(String left, String right) {
left = left.trim().toString();
right = right.trim().toString();
System.out.println("Left--->" + left);
System.out.println("right--->" + right);
if (left == " " || right == " ") {
return 0;
}
if (left.equals(right)) {
return 1;
}
String[] leftStr = left.split("\\.");
String[] rightStr = right.split("\\.");
int leftSize = leftStr.length;// 数组长度
int rightSize = rightStr.length;// 数组长度
int index = 0;
int result = 0;
int leftS;
int rightS;
while (true) {
// 有效性
if ((index >= leftSize) && (index >= rightSize)) {
break;
}
;
try {
// 获取当前数字
if (index < leftSize) {
leftS = Integer.valueOf(leftStr[index]).intValue();
} else {
leftS = 0;
}
;
if (index < rightSize) {
rightS = Integer.valueOf(rightStr[index]).intValue();
} else {
rightS = 0;
}
;
} catch (Exception e) {
return 0;
}
// 对比当前数字
if (leftS > rightS) {// 左边大
result = 2;
break;
} else if (leftS < rightS) {// 右边大
result = 3;
break;
} else {// 相等,继续对比,不做处理
index++;
}
;
}
;
return result;
}
不过有的时候会出现不规则的版本好,例如1.1.1.11dsad。含有了数字以外的其他字符。如果此时想只要数字部分,就需要进行处理了。
在调用compareVersionName方法传递参数的时候,先将参数挨个传入versionName方法中进行处理。得到纯数字的版本好。
/**
* 用来处理不正规的版本号,获得正常的数字部分
*/
public String versionName(String oldVersion) {
StringBuilder builder = new StringBuilder();
String[] sss = oldVersion.split("\\.");
System.out.println(Arrays.toString(sss));
String str1 = sss[sss.length - 1];
StringBuilder builder1 = new StringBuilder();
for (int i = 0; i < str1.length(); i++) {
String str2 = String.valueOf(str1.charAt(i));
if (isInteger(str2)) {
builder1.append(str2);
} else {
break;
}
}
for (int i = 0; i < sss.length - 1; i++) {
builder.append(sss[i]).append(".");
if (i == sss.length - 2) {
builder.append(builder1.toString());
}
}
return builder.toString();
}
/**
* 利用抛异常来判断是不是数字
* @param value
* @return
*/
public static boolean isInteger(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}