Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. /**
  2. * Compares two version strings to each other.
  3. *
  4. * @param versionOne
  5. * first version string
  6. * @param versionTwo
  7. * second version string
  8. * @return {@link CompareResult#GREATER} if argument one is greater, {@link CompareResult#LESS}
  9. * if argument one is less and otherwise {@link CompareResult#EQUAL}
  10. * @throws NullPointerException
  11. * if any of the parameters is null
  12. * @throws NumberFormatException
  13. * if any of the parameters contains something besides spaces, dots or integral
  14. * numbers
  15. * @throws IllegalArgumentException
  16. * if any of the arguments is empty
  17. */
  18. public static CompareResult compareVersions(final String versionOne, final String versionTwo) throws NullPointerException, NumberFormatException, IllegalArgumentException
  19. {
  20. final String trimmedOne = versionOne.trim();
  21. final String trimmedTwo = versionTwo.trim();
  22.  
  23. if (trimmedOne.isEmpty() || trimmedTwo.isEmpty())
  24. {
  25. throw new IllegalArgumentException("Empty versionstrings are invalid. (One: '" + trimmedOne + "' Two: '" + trimmedTwo + "')");
  26. }
  27.  
  28. final String[] versionOneParts = trimmedOne.split("[.]");
  29. final String[] versionTwoParts = trimmedTwo.split("[.]");
  30.  
  31. final int longest = Integer.max(versionOneParts.length, versionTwoParts.length);
  32.  
  33. if (longest > 3)
  34. {
  35. throw new IllegalArgumentException("The semantic version should only have up to 3 parts, eg: '1.23.2312'.");
  36. }
  37.  
  38. final int length = Integer.min(versionOneParts.length, versionTwoParts.length);
  39.  
  40. for (int i = 0; i < length; i++)
  41. {
  42. final Integer numberOne = Integer.parseInt(versionOneParts[i]);
  43. final Integer numberTwo = Integer.parseInt(versionTwoParts[i]);
  44.  
  45. if (numberOne < numberTwo)
  46. {
  47. return CompareResult.LESS;
  48. }
  49. if (numberTwo < numberOne)
  50. {
  51. return CompareResult.GREATER;
  52. }
  53. }
  54.  
  55. if (longest > length)
  56. {// If one of the strings had more version parts, we will check those too.
  57. final String[] bigger = versionOneParts.length > versionTwoParts.length ? versionOneParts : versionTwoParts;
  58. final boolean versionOneWasLonger = bigger == versionOneParts;
  59. for (int i = length; i < longest; i++)
  60. {
  61. if (Integer.parseInt(bigger[i]) != 0)
  62. {
  63. return versionOneWasLonger ? CompareResult.GREATER : CompareResult.LESS;
  64. }
  65. }
  66. }
  67.  
  68. return CompareResult.EQUAL;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement