Если честно, лексикографическое сравнение String
будет очень хорошо работать в большинстве случаев.
"1.0.0".compareTo("1.0.1") // -1
Возможен некоторая ошибка, если, например, у нас есть некоторое форматирование в некоторой версии
"1.01.1".compareTo("1.1.0") // -1 should be 1
Это можно легко скорректировать, очистив эти значения и, конечно, предоставив некоторые простые методы.
public class Version implements Comparable{
private static final String sanitizeRegex = ".0([1-9]+)";
private String value;
public Version(String value){
if(value == null) throw new IllegalArgumentException("A version need a valid value");
this.value = value.replaceAll(sanitizeRegex, ".$1");
}
public boolean isLessThan(Version o){
return this.compareTo(o) < 0;
}
public boolean isGreaterThan(Version o){
return this.compareTo(o) > 0;
}
public boolean isEquals(Version o) {
return this.compareTo(o) == 0;
}
@Override
public int compareTo(Version o) {
return this.value.compareTo(o.value);
}
@Override
public String toString() {
return value;
}
}
Если это необходимо, regex удалит удаление 0
.
01 -> 1
0 -> 0
00 -> 0
10 -> 10
Это позволяет нам иметь довольно простое сравнение, используя то, что уже существует.
Быстрый тестовый пример, взятый из Ответ Йохана Пола
System.out.println(new Version("1.2").isGreaterThan(new Version("1.1") )); // true
System.out.println(new Version("1.2.1").isGreaterThan(new Version("1.1.2") )); // true
System.out.println(new Version("1.1.1").isGreaterThan(new Version("1.1.1") )); // false
System.out.println(new Version("1.1.1").isGreaterThan(new Version("1.1") )); // true
System.out.println(new Version("1.1.0").isGreaterThan(new Version("1.1") )); // true
System.out.println(new Version("1.1-RC2").isGreaterThan(new Version("1.1-RC1"))); // true
System.out.println(new Version("1.1-RC1").isGreaterThan(new Version("1.1") )); // true
System.out.println(new Version("1.0.1").isGreaterThan(new Version("1.1") )); // false
Этот тип ошибок (ModuleNotFoundError
) обычно возникает из-за того, что в вашей системе установлены различные версии Python. Если у вас установлены Python 2 и 3, используйте pip2
или pip3
для установки вашего модуля.
pip2 install openpyxl # for python2
pip3 install openpyxl # for python3