Лучший способ сравнения двух строковых значений numberi c - PullRequest
1 голос
/ 07 мая 2020

Я сравниваю два строковых значения numeri c, как показано ниже

String version1 = "01.00.00"
String version2 = "01.01.00"

if (version2.compareTo(version1) >= 0) { //false
}

, но это не удается, когда у меня

    String version1 = "01.99.00"
    String version2 = "01.100.00"
    if (version2.compareTo(version1) >= 0) { //true
    }

, хотя "01.100.00" больше "01.99.00" . Любой лучший подход сравните эти две строки и определите, больше ли версия 2, чем версия 1

Ответы [ 2 ]

3 голосов
/ 07 мая 2020

Вы можете использовать следующий пользовательский Comparator:

class MyComparator implements Comparator<String> {    
    @Override
    public int compare(String s1, String s2) {  

        int compVal;   

        int s1index1 = s1.indexOf(".");
        String s1part1 = s1.substring(0, s1index1);
        String s1part2 = s1.substring(s1index1 + 1, s1.lastIndexOf("."));
        String s1part3 = s1.substring(s1.lastIndexOf(".") + 1);

        int s2index1 = s2.indexOf(".");
        String s2part1 = s2.substring(0, s2index1);
        String s2part2 = s2.substring(s2index1 + 1, s2.lastIndexOf("."));
        String s2part3 = s2.substring(s2.lastIndexOf(".") + 1);

        compVal = Integer.compare(Integer.parseInt(s1part1), Integer.parseInt(s2part1));
        if (compVal == 0) {
            compVal = Integer.compare(Integer.parseInt(s1part2), Integer.parseInt(s2part2));
            if (compVal == 0) {
                compVal = Integer.compare(Integer.parseInt(s1part3), Integer.parseInt(s2part3));
            }
        }
        return compVal;
    }
}
0 голосов
/ 07 мая 2020

Вам нужно интерпретировать строки как числа и сравнить их. Если ваши строки следуют этому шаблону - строки цифр, разделенные точками - вы можете сделать это дешево, используя что-то вроде этого:

int num1 = Integer.parseInt(version1.replace(".", ""));
int num2 = Integer.parseInt(version2.replace(".", ""));
if(num2 >= num1) {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...