diff options
Diffstat (limited to 'main/src/cgeo/geocaching/sorting/NameComparator.java')
| -rw-r--r-- | main/src/cgeo/geocaching/sorting/NameComparator.java | 17 |
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; + } } |
