2010-11-19 3 views
6

여기에 로케일 알파벳 순서입니다 : wikipedia 여기
내 코드입니다 :조합기는 지정된 로케일에 대한 종류를 잘하지 않습니다

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); 
} 

그리고 여기에 출력입니다 :

Austrija이
C
C
Grčka
Slovačka
Slovenija
Španija
스르 비야
Švajcarska
Švedska
DJ

이 올바른 순서없는 이상이 링크에서 볼 수 있듯이.
내가 뭘 잘못하고 있니?

+0

S와 Š로 시작하는 단어는 섞여 있고 Đ는 끝나지 않아야합니다. – cbaby

+0

누구나 출력이 잘못되었다는 것을 알 수 있다고 가정하면 과장됩니다. –

+1

그래서 알파벳 순서가있는 링크를 추가하고 출력의 잘못된 점을 지적하는 덧글을 추가했습니다. – cbaby

답변

-1

정치 및 언어 환경으로 인해 알려진 문제임을 알게되었습니다. 도와 주셔서 감사합니다.

+2

나는 이것에 관해 그렇게 확신하지 않는다. 정렬 규칙은 다양한 유니 코드 표준 (unicode.org) 릴리스에 의해 캡처됩니다. 현재 표준 버전 (6.0)에는 세르비아에 대한 올바른 정렬 규칙이 있지만 Java는 이전 스냅 샷을 구현합니다. ICU의 구현을 살펴 보시기 바랍니다 : http://icu-project.org/apiref/icu4j/com/ibm/icu/text/Collator.html 그리고 그것이 올바른 방법으로 정렬되는지보십시오. –

1

나는 문제가 나는 당신의 wikipedia 페이지에서 볼과 그의 ISO 링크를 @Vash으로 어떤 국가 코드 RS

+1

http://www.iso.org/iso/english_country_names_and_code_elements 그리고 Collator에서 getAvailableLocales()를 호출하면 다른 것들 사이에서 sr_RS를 얻습니다. – cbaby

3

ISO-3166에 없다는 것을 할 수 있다고 생각합니다. "sr"세르비아가 너를 의미한다고 생각해? 그런 다음 "cs"를 국가로 선택해야합니다.

편집 : 사용하는 자바 버전에 따라 다릅니다. Java 6은 새로운 iso 표준을 사용합니다.

+0

Vash의 링크는 오래된 iso 코드를 가리 킵니다. 지원되는 로케일을 점검하고 Collator는 sr_RS 및 레거시 sr_CS를 지원합니다. sr_CS를 사용하면 동일한 결과가 반환됩니다. – cbaby

+0

ISO-3166은 정의 상으로는 구식 일 수 없습니다. 이 링크는 Java 문서에서 제공됩니다. –

0

원하는 정렬 순서를 사용할 수없는 경우 RuleBasedCollator을 사용하여 고유 한 순서를 만들 수 있습니다. 이 클래스의 문서가 두려워하지 마십시오.

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

동적으로 많은 로케일을 기반으로 정렬 작업을 수행해야하므로 문제가 해결되지 않아 40 개 이상의 다른 언어를 포괄하는 규칙을 정의해야합니다. 그런 괴물을 기꺼이 쓸지라도, 그것을 유지하는 것은 악몽 일 것입니다. 저는 'sr'을 비슷한 로케일로 대체하기로했습니다. – cbaby

관련 문제