diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2011-10-18 18:55:39 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2011-10-18 18:55:39 +0200 |
| commit | afaff63b3bd2881b5e4d7dbb84380c3fade544cd (patch) | |
| tree | 6e1c4e73ce1f11b93d2fd7735f08769111d92c39 /main/src | |
| parent | 90ed739f3981954b9bc571fd8d9f10b486418932 (diff) | |
| download | cgeo-afaff63b3bd2881b5e4d7dbb84380c3fade544cd.zip cgeo-afaff63b3bd2881b5e4d7dbb84380c3fade544cd.tar.gz cgeo-afaff63b3bd2881b5e4d7dbb84380c3fade544cd.tar.bz2 | |
fix #671, performance of name sorting
Diffstat (limited to 'main/src')
| -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; + } } |
