2012-02-13 5 views
20

Quiero ordenar un ArrayList<String> pero el problema es mis caracteres en el idioma nativo - mi alfabeto es el siguiente: a, ą, b, c, č, d, e, f ... z, ž. Como ve z el carácter es el segundo desde el final y ą es el segundo en el alfabeto, por lo que después de ordenar mi matriz, se ordena de forma incorrecta. Todos mis caracteres en el idioma nativo se mueven al final de la matriz. Ejemplo:Matriz de Java ordenar 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); 
     } 
    } 
} 

Salida:

Unsorted: 
bbc 
ąbc 
abc 
zzz 

Sorted: 
abc 
bbc 
zzz 
ąbc 

debe ser:

Sorted: 
abc 
ąbc 
bbc 
zzz 
+1

Ver [esta pregunta] (http://stackoverflow.com/questions/4225523/collator-doesnt-sort-right-for-given-locale) –

Respuesta

22

Debe utilizar Collator clase.

Por ejemplo

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

Y a continuación, ordenar la colección usar este alzadora

Collections.sort(theList, lithuanianCollator); 
+0

Mi país es Lituania, y el idioma es lituano, ¿qué debo hacer? , porque si estoy en lo correcto, ¿mi idioma no es compatible con la clase Locale? – Minutis

+2

Esta respuesta es correcta, pero no es necesario crear un comparador: el intercalador ya es una instancia de Comparator. Collections.sort (myList, Collator.getInstance (Locale.FRENCH)); es un código completo. –

+1

'Collator' ** is-a **' Comparator' por diseño. Crear otro 'Comparador' es innecesario. –

5

Puede utilizar Collator hacer comparaciones de localización de Cuerda sensibles.

+0

Gracias, pero la respuesta anterior es más mejorada, pensó que tenía razón. – Minutis