首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 字串排序陷阱:"9" 大於 "67"?正確數值排序姿勢

     編輯:程式設計綜合問答

問題重現

String a = "34 9 -7 67 25";
String[] b = a.split(" ");
Arrays.sort(b);
System.out.println(Arrays.toString(b));
// 輸出: [-7, 25, 34, 67, 9]  // "9" 排在最後!

Arrays.sort 預設按字典序(Unicode 碼位)比較字串,"9" > "6",故 "9" 排在 "67" 之後。

正確做法:轉數值再排序

String a = "34 9 -7 67 25";
String[] b = a.split(" ");
int[] nums = new int[b.length];
for (int i = 0; i < b.length; i++) {
    nums[i] = Integer.parseInt(b[i]);
}
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
// 輸出: [-7, 9, 25, 34, 67]

進階:自訂 Comparator(保留字串形式)

Arrays.sort(b, (s1, s2) -> Integer.compare(Integer.parseInt(s1), Integer.parseInt(s2)));

若資料量大、頻繁排序,建議一次性解析為數值陣列,避免重複解析開銷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved