Advertisement
infogulch

Untitled

Apr 26th, 2012
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 0.91 KB | None | 0 0
  1. class NaturalComparator implements Comparator {  // use generic objects and .toString() to support File etc
  2.     public int compare(Object f1, Object f2) {
  3.         // split *between* the transition from digits to non-digits & vice-versa
  4.         String[] s1 = f1.toString().split("(?<!\\d)(?=\\d)|(?<=\\d)(?!\\d)");
  5.         String[] s2 = f2.toString().split("(?<!\\d)(?=\\d)|(?<=\\d)(?!\\d)");
  6.         int c = 0;
  7.         for (int i = 0; i < s1.length && i < s2.length; i++)
  8.         {
  9.             // there are non-digits or the digits are the same length
  10.             if (s1[i].length() == s2[i].length() || s1[i].matches("\\D") || s2[i].matches("\\D"))
  11.                 c = s1[i].compareTo(s2[i]);
  12.             else
  13.                 c = s1[i].length() > s2[i].length() ? 1 : -1;
  14.             if (c != 0)
  15.                 return c;
  16.         }
  17.         return s1.length == s2.length ? 0 : s1.length > s2.length ? 1 : -1;
  18.     }
  19. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement