aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/sorting/NameComparator.java
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2011-10-15 17:03:15 +0200
committerBananeweizen <bananeweizen@gmx.de>2011-10-15 17:03:15 +0200
commit41e1965db638aa3b8109dc28b5f4a0eff4e0371f (patch)
treed4e9b535c9e2de03fac38d502831ac29d1d0d803 /main/src/cgeo/geocaching/sorting/NameComparator.java
parent6952e708e7526079067561906e381864b2ba8fb5 (diff)
downloadcgeo-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/cgeo/geocaching/sorting/NameComparator.java')
-rw-r--r--main/src/cgeo/geocaching/sorting/NameComparator.java16
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);
}
}