/**
* Compare two version numbers version1 and version1.
* If version1 > version2 return 1, if version1 < version2 return -1, otherwise
* return 0.
*
* You may assume that the version strings are non-empty and contain only
* digits and the . character.
* The . character does not represent a decimal point and is used to separate
* number sequences.
* For instance, 2.5 is not "two and a half" or "half way to version three", it
* is the fifth second-level revision of the second first-level revision.
*
* Here is an example of version numbers ordering:
*
* 0.1 < 1.1 < 1.2 < 13.37
*
* Tags: String
*/
class CompareVersionNums {
public static void main(String[] args) {
String v1 = "001.3.3.7.000";
String v2 = "1.3.3.7";
System.out.println(compareVersion(v1, v2));
}
/**
* Compare each level and compare the rest
* Note the input can be complex than the example, more dots, more zeros
*/
int compareVersion(String version1, String version2) {
if (version1 == null && version2 == null) return 0; // same
if (version1 == null || version2 == null) return version1 == null ? -1 : 1;
String[] list1 = version1.split("\\."); // back slash
String[] list2 = version2.split("\\.");
int i = 0;
while (i < list1.length || i < list2.length) {
int a = i < list1.length ? Integer.valueOf(list1[i]) : 0;
int b = i < list2.length ? Integer.valueOf(list2[i]) : 0;
if (a < b) return -1;
else if (a > b) return 1;
i++; // update i
}
return 0;
}
}