String[] arr = {"1#zhang#3207237", "2#Wang#3207232"} 按最後 `#` 後數字升序排序。
import java.util.*;
public class SortByTailNumber {
public static void main(String[] args) {
String[] data = {"1#zhang#3207237", "2#Wang#3207232", "3#Li#100"};
Arrays.sort(data, (s1, s2) -> {
int n1 = extractTailNumber(s1);
int n2 = extractTailNumber(s2);
return Integer.compare(n1, n2);
});
System.out.println(Arrays.toString(data));
// 輸出: [3#Li#100, 2#Wang#3207232, 1#zhang#3207237]
}
private static int extractTailNumber(String s) {
int idx = s.lastIndexOf('#');
return (idx >= 0 && idx < s.length() - 1)
? Integer.parseInt(s.substring(idx + 1))
: 0;
}
}
lastIndexOf('#') 定位最後一個分隔符。substring(idx+1) 取尾部數字子串。Integer.parseInt 轉數值比較,避免字典序("100" < "2")。Comparator 類。List list = new ArrayList<>(Arrays.asList(data));
list.sort(Comparator.comparingInt(SortByTailNumber::extractTailNumber));
// 或用 LinkedHashMap 保持插入序