在情況下,我有一個字符串以下列格式的陣列 -如何在Java中對字符串數組(以數字連接的名稱形式)進行排序?
[ 「synthia 16」, 「艾麗西亞3」, 「艾麗西亞2」, 「艾麗西亞1」, 「synthia 2」]
該清單首先按名稱排序,然後是以下數字。排序的輸出應爲─
[ 「艾麗西亞1」, 「艾麗西亞2」, 「艾麗西亞3」, 「synthia 2」, 「16 synthia」]
我用comaparator做這使用Java:
import java.util.Comparator;
import java.util.Arrays;
public class SortList {
public static void main (String[] args) {
String[] names = {"synthia 16", "alicia 4", "alicia 19", "alicia 1", "synthia 2"};
System.out.println("Unsorted list:\n ");
displayList(names);
Arrays.sort(names, new nameComparator());
System.out.println("\nSorted list:\n");
displayList(names);
}
public static void displayList(String[] names) {
for(String name:names) {
System.out.println(name);
}
}
private static class nameComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
String[] s1NameNumPair = s1.split(" ");
String[] s2NameNumPair = s2.split(" ");
if (s1NameNumPair[0].compareTo(s2NameNumPair[0]) > 1) {
return 1;
} else if (s1NameNumPair[0].compareTo(s2NameNumPair[0]) < 1) {
return -1;
} else {
Double n1 = Double.parseDouble(s1NameNumPair[1]);
Double n2 = Double.parseDouble(s2NameNumPair[1]);
if (n1 > n2) { return 1; }
else if (n1 < n2) { return -1; }
else { return 0; }
}
}
}
}
但是,像這樣使用比較器只按名稱的字母順序排列數組。以下是此代碼生成的輸出:
Unsorted list:
synthia 16
alicia 4
alicia 19
alicia 1
synthia 2
Sorted list:
alicia 1
alicia 19
alicia 4
synthia 2
synthia 16
如何才能獲得正確的排序輸出?
相關:[比較和thenComparing給出編譯錯誤](http://stackoverflow.com/questions/40500280/comparing-and-thencomparing-gives-compile-error )。 –