aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/sorting/NameComparator.java
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2011-10-18 18:55:39 +0200
committerBananeweizen <bananeweizen@gmx.de>2011-10-18 18:55:39 +0200
commitafaff63b3bd2881b5e4d7dbb84380c3fade544cd (patch)
tree6e1c4e73ce1f11b93d2fd7735f08769111d92c39 /main/src/cgeo/geocaching/sorting/NameComparator.java
parent90ed739f3981954b9bc571fd8d9f10b486418932 (diff)
downloadcgeo-afaff63b3bd2881b5e4d7dbb84380c3fade544cd.zip
cgeo-afaff63b3bd2881b5e4d7dbb84380c3fade544cd.tar.gz
cgeo-afaff63b3bd2881b5e4d7dbb84380c3fade544cd.tar.bz2
fix #671, performance of name sorting
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;
+ }
}