Получение ошибки, даже если пакет установлен

Если честно, лексикографическое сравнение 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

-3
задан eyllanesc 18 January 2019 в 03:25
поделиться

1 ответ

Этот тип ошибок (ModuleNotFoundError) обычно возникает из-за того, что в вашей системе установлены различные версии Python. Если у вас установлены Python 2 и 3, используйте pip2 или pip3 для установки вашего модуля.

pip2 install openpyxl  # for python2
pip3 install openpyxl  # for python3
0
ответ дан Infected Drake 18 January 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: