簡體   English   中英

你如何比較 Java 中的兩個版本字符串?

[英]How do you compare two version Strings in Java?

是否有用於比較版本號的標准習慣用法? 我不能只使用直接的 String compareTo,因為我還不知道最大發布點數是多少。 我需要比較版本,並有以下成立:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

最簡單的解決方案是使用字符串比較。 刪除不需要的點或字母,以防版本類似於 v1.0.1Beta 使用 Regex("[^0-9]") 並且您得到 1.0 和 1.0.1 等版本:

String ver1 = "10";
String ver2 = "101";
    
int res = ver1.compareTo(ver2);
System.out.println("res: "+res);

如果ver1在字典上小於ver2 ,則將返回一個負數,如果相等則返回 0,如果ver1大於則返回正數。

compareTo() 方法按字典順序比較兩個字符串。

比較基於字符串中每個字符的 Unicode 值。

如果字符串等於另一個字符串,則該方法返回 0。 如果字符串小於另一個字符串(更少字符),則返回小於 0 的值;如果字符串大於另一個字符串(更多字符),則返回大於 0 的值。

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

是否有用於比較版本號的標准習語? 我不能只使用直接的String compareTo,因為我還不知道最大的點釋放數將是多少。 我需要比較版本,並滿足以下條件:

1.0 < 1.1
1.0.1 < 1.1
1.9 < 1.10

我的java解決方案

 public int compareVersion(String version1, String version2) {

    String[] first = version1.split("\\.");
    String[] second = version2.split("\\.");

    int len = first.length<=second.length? first.length:second.length;

    // the loop runs for whichever is the short version of two strings
    for(int i=0;i<len;i++){
      int firstInt = Integer.parseInt(first[i]);
      int secondInt = Integer.parseInt(second[i]);
        if(firstInt<secondInt){
            return -1;
        }
        else if(firstInt>secondInt){
            return 1;
        }
    }

    // below two condition check if the length are the not the same

    //if first string length is short then start from after first string length and compare it with second string value. second string value is not zero that means it is greater.
    if(first.length<second.length){
        for(int i=first.length;i<second.length;i++){
            int secondInt = Integer.parseInt(second[i]);
            if(secondInt!=0){
                return -1;
            }
        }
    }
    // similar logic as above just that first length is grater this time.
     else if(first.length>second.length){
        for(int i=second.length;i<first.length;i++){
            int firstInt = Integer.parseInt(first[i]);
            if(firstInt!=0){
                return 1;
            }
        }        
    }

    // return 0 if both string value is the same
    return 0;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM