问题:
给定两个版本号,比较哪一个版本号更新。比如 1.2.9 比 1.2.4 新。 1.0.1 比 1.0 新。
思路:
当比较版本号时,我们需要从头到尾比较每一组数据。所以,我们需要首先得到版本号的一个数字,第二个数字,第三个数字,然后和另一个版本号码所对应的数字进行比较。
代码:
public class VersionComparison {
public static void main(String[] args) {
String version1 = "2.20.3";
String version2 = "2.6.9";
int result = compare(version1, version2);
if (result == 1) {
System.out.println(version1 + " is newer.");
} else if (result == 0) {
System.out.println("The two versions are the same.");
} else {
System.out.println(version2 + " is newer.");
}
}
/**
*
* @param version1
* @param version2
* @return if version1 > version2, return 1, if equal, return 0, else return -1
*/
public static int compare(String version1, String version2) {
if (version1 == null || version1.length() == 0 || version2 == null || version2.length() == 0 )
throw new IllegalArgumentException("Invalid parameter!");
int index1 = 0;
int index2 = 0;
while(index1 < version1.length() && index2 < version2.length()) {
int[] number1 = getValue(version1, index1);
int[] number2 = getValue(version2, index2);
if (number1[0] < number2[0]) return -1;
else if (number1[0] > number2[0]) return 1;
else {
index1 = number1[1] + 1;
index2 = number2[1] + 1;
}
}
if(index1 == version1.length() && index2 == version2.length()) return 0;
if(index1 < version1.length())
return 1;
else
return -1;
}
/**
*
* @param version
* @param index the starting point
* @return the number between two dots, and the index of the dot
*/
public static int[] getValue(String version, int index) {
int[] value_index = new int[2];
StringBuilder sb = new StringBuilder();
while(index < version.length() && version.charAt(index) != '.') {
sb.append(version.charAt(index));
index++;
}
value_index[0] = Integer.parseInt(sb.toString());
value_index[1] = index;
return value_index;
}
}
转载请注明出处: http://blog.csdn.net/beiyeqingteng