2012-02-13 3 views
20

ArrayList<String>을 정렬하고 싶지만 문제는 제 모국어 문자입니다 - 내 알파벳은 a, ą, b, c, č, d, e, f ... z, ž입니다. 알다시피 z 문자는 끝에서 두 번째이고 ą은 알파벳 순서로 두 번째입니다. 그래서 배열을 정렬하면 잘못 정렬됩니다. 모든 모국어 문자가 배열 끝으로 이동합니다. 예 :Java 배열 정렬 UTF-8

package lt; 

import java.util.ArrayList; 
import java.util.Collections; 

public class test { 
    public static void main(String[] args) { 
     List<String> items = new ArrayList<>(); 
     items.add("bbc"); 
     items.add("ąbc"); 
     items.add("abc"); 
     items.add("zzz"); 

     System.out.println("Unsorted: "); 
     for(String str : items) { 
      System.out.println(str); 
     } 

     Collections.sort(items); 
     System.out.println(); 

     System.out.println("Sorted: "); 
     for(String str : items) { 
      System.out.println(str); 
     } 
    } 
} 

출력 :

Unsorted: 
bbc 
ąbc 
abc 
zzz 

Sorted: 
abc 
bbc 
zzz 
ąbc 

은 다음과 같아야합니다

Sorted: 
abc 
ąbc 
bbc 
zzz 
+1

[이 질문에]보기 (http://stackoverflow.com/questions/4225523/collator-doesnt-sort-right-for-given-locale) –

답변

22

당신은 Collator 클래스를 사용해야합니다. 당신은 로케일에 의존하는 String의 comparisions을 할 Collator을 사용할 수 있습니다

Locale lithuanian = new Locale("lt_LT"); 
Collator lithuanianCollator = Collator.getInstance(lithuanian); 

그리고 예를

를 들어

는이 레이터

Collections.sort(theList, lithuanianCollator); 
+0

우리 나라는 리투아니아이고 언어는 리투아니아어입니다, 어떻게해야합니까? 왜냐하면 내가 맞으면 내 언어가 Locale 클래스에서 지원되지 않기 때문입니다. – Minutis

+2

이 답변은 정확하지만 Comparator를 만들 필요가 없습니다. Collator는 이미 Comparator의 인스턴스입니다. Collections.sort (myList, Collator.getInstance (Locale.FRENCH)); 완전한 코드입니다. –

+1

'Collator' **는 의도적으로 'Comparator'입니다. 다른 'Comparator'를 만드는 것은 불필요합니다. –

5

를 사용하여 컬렉션을 정렬합니다.

+0

고마워,하지만 위의 답변이 더 향상되었습니다, 당신이 옳다고 생각했습니다. – Minutis