Java Version Compare versionCompare(String str1, String str2)

Here you can find the source of versionCompare(String str1, String str2)

Description

Compares two version strings.

License

Open Source License

Parameter

Parameter Description
str1 a string of ordinal numbers separated by decimal points.
str2 a string of ordinal numbers separated by decimal points.

Return

The result is a negative integer if str1 is _numerically_ less than str2. The result is a positive integer if str1 is _numerically_ greater than str2. The result is zero if the strings are _numerically_ equal.

Declaration

public static int versionCompare(String str1, String str2) 

Method Source Code

//package com.java2s;
//License from project: Open Source License 

public class Main {
    /**/* ww w .  ja  v  a 2s .  c  o  m*/
     * Compares two version strings.
     * 
     * Use this instead of String.compareTo() for a non-lexicographical
     * comparison that works for version strings. e.g. "1.10".compareTo("1.6").
     * 
     * @note It does not work if "1.10" is supposed to be equal to "1.10.0".
     * 
     * @param str1
     *            a string of ordinal numbers separated by decimal points.
     * @param str2
     *            a string of ordinal numbers separated by decimal points.
     * @return The result is a negative integer if str1 is _numerically_ less
     *         than str2. The result is a positive integer if str1 is
     *         _numerically_ greater than str2. The result is zero if the
     *         strings are _numerically_ equal.
     */
    public static int versionCompare(String str1, String str2) {
        String[] vals1 = str1.split("\\.");
        String[] vals2 = str2.split("\\.");
        int i = 0;
        // set index to first non-equal ordinal or length of shortest version
        // string
        while (i < vals1.length && i < vals2.length && vals1[i].equals(vals2[i])) {
            i++;
        }
        // compare first non-equal ordinal number
        if (i < vals1.length && i < vals2.length) {
            String v = vals1[i];
            int index = v.indexOf('-');
            if (index > -1) {
                // ex : 1-insiders
                v = v.substring(0, index);
            }
            int diff = Integer.valueOf(v).compareTo(Integer.valueOf(vals2[i]));
            return Integer.signum(diff);
        }
        // the strings are equal or one string is a substring of the other
        // e.g. "1.2.3" = "1.2.3" or "1.2.3" < "1.2.3.4"
        return Integer.signum(vals1.length - vals2.length);
    }
}

Related

  1. versionCompare(final String current, final String remote)
  2. versionCompare(int... args)
  3. versionCompare(String firstVersionString, String secondVersionString)
  4. versionCompare(String fromVersion, String toVersion)
  5. versionCompare(String str1, String str2)
  6. versionCompare(String userVersion, String supportVersion)
  7. versionCompare(String ver1, String ver2)
  8. VersionComparer(String a, String b, boolean includeEqual)