2012-10-08 1 views
18

숫자로 문자열을 정렬하는 것은 언어마다 다르게 수행됩니다. 예를 들어 영문자는 오름차순으로 글자 앞에옵니다. 그러나 독일어에서는 숫자가 문자 뒤에 오름차순으로 정렬됩니다.Java로 언어 정렬 (독일어)

나는 따르는 Collator로 사용하여 문자열을 정렬하는 시도 :

private Collator collator = Collator.getInstance(Locale.GERMANY); 
collator.compare(str1, str2) 

그러나 비교 위의

가 문자 규칙 후에 계정 자리로하지 않습니다.

하나는 자바가 다음과 같이 내가 RuleBasedCollator를 사용하고 당분간 계정에이 규칙을 (자리 편지 쓰기 후) 복용되지 않는 이유 아이디어가 있습니까 :

private final String sortOrder = "< a, A < b, B < c, C < d, D < e, E < f, F < g, G < h, H < i, I < j, J < k, K < l, L < m, M < n, N < o, O < p, P < q, Q < r, R < s, S < t, T < u, U < v, V < w, W < x, X < y, Y < z, Z < 0 < 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9"; 

private Collator collator = new RuleBasedCollator(sortOrder); 
+6

그것은 당신이 당신의 정렬 순서 모음 변이와 샤프의 (äöüß)을하지 않아도 의도적인가 :

그리고 당신은 기본적으로이 수치가 처음 배치 한 것을 발견했다으로

? 나는 그들이 독일 콜레 이터를 갖는 것이 중요하다고 말하고 싶다. –

+0

예, 테스트 케이스의 경우 움라우트와 특수 문자가 누락되었습니다. 단지 매우 간단하게 유지하고 싶었습니다. – Amir

+4

또한 : 다른 문자 다음에 해당 정렬 자릿수를 따르는 규칙은 무엇입니까? 독일어에는 몇 가지 다른 데이터 정렬이 있고 그 중 일부는 먼저 정렬합니다. –

답변

13

당신은 확인할 수 있습니다 소스 코드/디버그 아무것도 변경되지 왜 을 볼 수 :

public static synchronized 
Collator getInstance(Locale desiredLocale) 
{ 
    // Snipping some code here 
    String colString = ""; 
    try { 
     ResourceBundle resource = LocaleData.getCollationData(desiredLocale); 

     colString = resource.getString("Rule"); 
    } catch (MissingResourceException e) { 
     // Use default values 
    } 
    try 
    { 
     result = new RuleBasedCollator(CollationRules.DEFAULTRULES + 
             colString, 
             CANONICAL_DECOMPOSITION); 
    } 
// Snipping some more code here 
:

Collator.getInstance(Locale.GERMANY); 

는 다음의 조각 코드를 호출

여기에 구체적인 규칙 (colString 어쨌든 비어 있음)은 (CollationRules.DEFAULTRULES) 이후에 으로 표시됩니다.

// NUMERICS 

    + "<0<1<2<3<4<5<6<7<8<9" 
    + "<\u00bc<\u00bd<\u00be" // 1/4,1/2,3/4 fractions 

    // NON-IGNORABLES 
    + "<a,A" 
    + "<b,B" 
    + "<c,C" 
    + "<d,D"