繁体   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