diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2011-10-15 17:03:15 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2011-10-15 17:03:15 +0200 |
| commit | 41e1965db638aa3b8109dc28b5f4a0eff4e0371f (patch) | |
| tree | d4e9b535c9e2de03fac38d502831ac29d1d0d803 /main/src | |
| parent | 6952e708e7526079067561906e381864b2ba8fb5 (diff) | |
| download | cgeo-41e1965db638aa3b8109dc28b5f4a0eff4e0371f.zip cgeo-41e1965db638aa3b8109dc28b5f4a0eff4e0371f.tar.gz cgeo-41e1965db638aa3b8109dc28b5f4a0eff4e0371f.tar.bz2 | |
new: sort cache series numerically correct when sorting by name
Diffstat (limited to 'main/src')
| -rw-r--r-- | main/src/cgeo/geocaching/sorting/NameComparator.java | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/sorting/NameComparator.java b/main/src/cgeo/geocaching/sorting/NameComparator.java index d301180..e17a945 100644 --- a/main/src/cgeo/geocaching/sorting/NameComparator.java +++ b/main/src/cgeo/geocaching/sorting/NameComparator.java @@ -4,6 +4,8 @@ import cgeo.geocaching.cgCache; import org.apache.commons.lang3.StringUtils; +import java.util.Scanner; + /** * sorts caches by name * @@ -17,6 +19,20 @@ public class NameComparator extends AbstractCacheComparator { @Override protected int compareCaches(cgCache cache1, cgCache cache2) { + // if the caches have a common prefix followed by a number, sort by the numerical value + // so 2 is before 11, although "11" comes before "2" + final String prefix = StringUtils.getCommonPrefix(cache1.name, cache2.name); + if (StringUtils.length(prefix) > 0) { + final String remaining1 = cache1.name.substring(prefix.length()).trim(); + if (remaining1.length() > 0 && Character.isDigit(remaining1.charAt(0))) { + final String remaining2 = cache2.name.substring(prefix.length()).trim(); + if (remaining2.length() > 0 && Character.isDigit(remaining2.charAt(0))) { + final Integer number1 = (new Scanner(remaining1)).nextInt(); + final Integer number2 = (new Scanner(remaining2)).nextInt(); + return number1.compareTo(number2); + } + } + } return cache1.name.compareToIgnoreCase(cache2.name); } } |
