在 Java 中對中文字符串進行排序,不能直接使用預設的字典序,因為 Unicode 編碼下的中文字符順序並不符合拼音或筆畫順序。正確的做法是利用 java.text.Collator 類,並指定 Locale.CHINA,這樣就能按照中文拼音順序正確排序。
下面通過一個完整的 Book 實體類與 Comparator 實現類,展示如何對包含中文書名的集合進行排序。
package test;
/**
* 書籍信息類
*/
public class Book {
private String bookId;
private String bookName;
private String publishingHouse;
public Book(String bookId, String bookName, String publishingHouse) {
this.bookId = bookId;
this.bookName = bookName;
this.publishingHouse = publishingHouse;
}
// Getter / Setter 省略...
@Override
public String toString() {
return "書號:" + bookId + "\n書名:" + bookName + "\n出版社:" + publishingHouse;
}
}
package test;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
/**
* 中文字符串排序演示
*/
public class ChineseStringSortDemo implements Comparator {
// 關鍵:獲取中文環境下的 Collator 實例
private final Collator collator = Collator.getInstance(Locale.CHINA);
public static void main(String[] args) {
List books = new ArrayList<>();
books.add(new Book("1", "英語", "英語出版社"));
books.add(new Book("2", "日語", "日語出版社"));
books.add(new Book("3", "德語", "德語出版社"));
books.add(new Book("4", "法語", "法語出版社"));
books.add(new Book("5", "俄語", "俄語出版社"));
// 使用自定義比較器進行排序
Collections.sort(books, new ChineseStringSortDemo());
System.out.println("=== 按書名拼音排序結果 ===");
for (Book book : books) {
System.out.println(book);
System.out.println("---");
}
}
@Override
public int compare(Book b1, Book b2) {
// 直接比較書名,Collator 會自動按拼音順序處理
return collator.compare(b1.getBookName(), b2.getBookName());
}
}
程序將按照拼音順序輸出:德語 → 法語 → 英語 → 日語 → 俄語。這證明了 Collator 配合 Locale.CHINA 完美解決了中文排序問題。
Collator.getInstance(Locale.CHINA) 獲取中文比較器Comparator<T> 介面,在 compare 方法中調用 collator.compare()Collections.sort() 或 List.sort() 即可完成排序Arrays.sort(array, collator)這種方式不僅代碼簡潔,而且完全符合 Java 國際化規範,是處理中文排序的標準做法。