2010-11-19 27 views
6

Dưới đây là thứ tự locale bảng chữ cái: wikipedia
Dưới đây là mã của tôi:collator không loại phù hợp với Locale cho

public static void main(String[] args) { 
    Locale loc = new Locale("sr","RS"); 

    Collator col = Collator.getInstance(loc); 
    col.setStrength(Collator.SECONDARY); 

    List<String> slova = new ArrayList<String>(); 

    slova.add("Austrija"); 
    slova.add("Slovačka"); 
    slova.add("Č"); 
    slova.add("Đ"); 
    slova.add("C"); 
    slova.add("Grčka"); 
    slova.add("Slovenija"); 
    slova.add("Španija"); 
    slova.add("Švajcarska"); 
    slova.add("Švedska"); 
    slova.add("Srbija"); 

    Collections.sort(slova,col); 

    for(String s: slova) 
     System.out.println(s); 
} 

Và đây là kết quả:

Austrija
C
C
Grčka
Slovačka
Slovenija
Španija
Srbija
Švajcarska
Švedska
Đ

Như bạn có thể nhìn thấy từ liên kết ở trên đây không phải là thứ tự đúng.
Tôi đang làm gì sai?

+0

Từ bắt đầu bằng S và Š được trộn lẫn và Đ không được cho là cuối cùng. – cbaby

+0

Giả định rằng mọi người có thể thấy rằng đầu ra sai là cường điệu mạnh. –

+1

Đó là lý do tại sao tôi đã thêm liên kết với thứ tự bảng chữ cái ở đầu và thêm nhận xét chỉ ra những gì sai với đầu ra. – cbaby

Trả lời

-1

Chỉ phát hiện ra nó là một vấn đề được biết đến gây ra bởi hoàn cảnh chính trị và ngôn ngữ. Cảm ơn vì sự giúp đỡ.

+2

Tôi không chắc chắn về điều này. Các quy tắc sắp xếp được bắt giữ bởi nhiều phiên bản khác nhau của Unicode Standard (unicode.org). Phiên bản tiêu chuẩn hiện tại (6.0) có thể có các quy tắc sắp xếp chính xác cho Serbia, nhưng Java thực hiện một số ảnh chụp trước đó. Hãy xem triển khai của ICU: http://icu-project.org/apiref/icu4j/com/ibm/icu/text/Collator.html và xem liệu nó có sắp xếp đúng cách hay không. –

1

Tôi nghĩ rằng vấn đề có thể là không có nước trong ISO-3166 với RS đang

+1

http://www.iso.org/iso/english_country_names_and_code_elements và khi tôi gọi getAvailableLocales() trên Collator tôi nhận được sr_RS trong số những người khác. – cbaby

3

Như tôi đã tìm thấy trên trang wikipedia của bạn và liên kết @Vash ISO mình. Tôi nghĩ bạn có nghĩa là "sr" Serbia? Sau đó, bạn sẽ phải chọn "cs" làm quốc gia.

Chỉnh sửa: tùy thuộc vào phiên bản java bạn sử dụng. Java 6 sử dụng tiêu chuẩn iso mới.

+0

Điểm liên kết của Vash với mã ISO lỗi thời. Tôi đã kiểm tra các ngôn ngữ được hỗ trợ và Collator không hỗ trợ sr_RS cũng như sr_CS cũ. Sử dụng sr_CS trả về cùng một đầu ra. – cbaby

+0

ISO-3166 không thể lỗi thời theo định nghĩa. Liên kết là từ tài liệu Java. –

0

Nếu thứ tự sắp xếp bạn muốn không khả dụng, bạn có thể tạo đơn đặt hàng của riêng mình bằng RuleBasedCollator. Đừng sợ hãi bởi các tài liệu của lớp này. Nó dễ dàng như:

String rules = "< a < b < c < ç < d ..."; 
RuleBasedCollator myRuleBased = new RuleBasedCollator(rules); 
Collections.sort(myList, myRuleBased); 
+0

Vâng, nó không hoàn toàn giải quyết được vấn đề của tôi vì tôi cần phải sắp xếp dựa trên rất nhiều Locales động, có nghĩa là tôi phải xác định một quy tắc bao gồm hơn 40 ngôn ngữ khác nhau. Ngay cả khi tôi sẵn sàng viết con quái vật như vậy, nó sẽ là cơn ác mộng tồi tệ hơn để duy trì nó. Tôi đã chọn để thay thế 'sr' với Locale tương tự. – cbaby

Các vấn đề liên quan