Versuchen Sie, diese Komparator (Strings aus beliebigen Zeichen beginnen), die alle nicht stelligen entfernt Zeichen vergleicht dann die übrigen Zeichen als Nummern:
Collections.sort(strings, new Comparator<String>() {
public int compare(String o1, String o2) {
return extractInt(o1) - extractInt(o2);
}
int extractInt(String s) {
String num = s.replaceAll("\\D", "");
// return 0 if no digits found
return num.isEmpty() ? 0 : Integer.parseInt(num);
}
});
Hier ist ein Test:
public static void main(String[] args) throws IOException {
List<String> strings = Arrays.asList("room1", "foo", "room2", "room100", "room10");
Collections.sort(strings, new Comparator<String>() {
public int compare(String o1, String o2) {
return extractInt(o1) - extractInt(o2);
}
int extractInt(String s) {
String num = s.replaceAll("\\D", "");
// return 0 if no digits found
return num.isEmpty() ? 0 : Integer.parseInt(num);
}
});
System.out.println(strings);
}
Ausgang:
[foo, room1, room2, room10, room100]
Sie benötigen eine benutzerdefinierte comparartor erstellen –
Ich weiß, aber ich habe keine Ahnung, wie es zu vergleichen. Wissen, ich versuche mit diesem: > private int compareNumbers (Zeichenfolge o1, String o2) { Muster numberPattern = Pattern.compile (PATTERN); Matcher matcher1 = NummerPattern.Matcher (o1); Matcher matcher2 = NummerPattern.Matcher (o2); int i1 = Ganzzahl.parseInt (matcher1.group()); int i2 = Ganzzahl.parseInt (matcher2.group()); System.out.println (i1 + "" + i2); Rückgabe i1 - i2; } – MAGx2
Sie müssen Annahmen treffen, wie zum Beispiel, alle Zeichenfolge im Format? oder entscheiden Sie, was genau Ihr Format ist, nur dann können Sie Ihren Komparator schreiben –