aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/sorting/NameComparator.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/sorting/NameComparator.java')
-rw-r--r--main/src/cgeo/geocaching/sorting/NameComparator.java17
1 files changed, 14 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/sorting/NameComparator.java b/main/src/cgeo/geocaching/sorting/NameComparator.java
index e17a945..fb98492 100644
--- a/main/src/cgeo/geocaching/sorting/NameComparator.java
+++ b/main/src/cgeo/geocaching/sorting/NameComparator.java
@@ -4,7 +4,8 @@ import cgeo.geocaching.cgCache;
import org.apache.commons.lang3.StringUtils;
-import java.util.Scanner;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* sorts caches by name
@@ -12,6 +13,8 @@ import java.util.Scanner;
*/
public class NameComparator extends AbstractCacheComparator {
+ private static final Pattern NUMBER_PATTERN = Pattern.compile("\\d+");
+
@Override
protected boolean canCompare(cgCache cache1, cgCache cache2) {
return StringUtils.isNotBlank(cache1.name) && StringUtils.isNotBlank(cache2.name);
@@ -27,12 +30,20 @@ public class NameComparator extends AbstractCacheComparator {
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();
+ final Integer number1 = getNumber(remaining1);
+ final Integer number2 = getNumber(remaining2);
return number1.compareTo(number2);
}
}
}
return cache1.name.compareToIgnoreCase(cache2.name);
}
+
+ private static Integer getNumber(final String string) {
+ Matcher matcher = NUMBER_PATTERN.matcher(string);
+ if (matcher.find()) {
+ return Integer.valueOf(matcher.group());
+ }
+ return 0;
+ }
}