2010-11-19 11 views
6

Aquí está el orden del alfabeto local: wikipedia
Aquí está mi código:Compaginadora no hace tipo adecuado para Locale dado

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

Y aquí está la salida:

Austrija
C
È
Grčka
Slovačka
Slovenija
Španija
Srbija
Švajcarska
Švédská
©

Como se puede ver en el enlace de arriba no es el orden correcto.
¿Qué estoy haciendo mal?

+0

Las palabras que comienzan con S y Š se mezclan y Đ no se supone que estén al final. – cbaby

+0

La suposición de que todos pueden ver que la salida es incorrecta es muy exagerada. –

+1

Es por eso que agregué un enlace con el orden alfabético en la parte superior y agregué un comentario que indicaba cuál es el problema con el resultado. – cbaby

Respuesta

-1

Acabo de enterarme de que es un problema conocido causado por circunstancias políticas y linguales. Gracias por la ayuda.

+2

No estoy tan seguro de esto. Las distintas reglas de clasificación son capturadas por varias versiones de Unicode Standard (unicode.org). La versión estándar actual (6.0) puede tener reglas de clasificación correctas para Serbia, pero Java implementa alguna instantánea previa. Por favor, eche un vistazo a la implementación de la UCI: http://icu-project.org/apiref/icu4j/com/ibm/icu/text/Collator.html y vea si está ordenando de la manera correcta. –

1

creo que el problema podría ser que no hay ningún país en ISO-3166 con código RS

+1

http://www.iso.org/iso/english_country_names_and_code_elements y cuando llamo getAvailableLocales() en Collator obtengo sr_RS entre los demás. – cbaby

3

Como ya he encontrado en su página wikipedia y @Vash su enlace ISO. Creo que te refieres con "sr" Serbia? Luego deberá elegir "cs" como país.

Edición: depende de la versión de Java que utilice. Java 6 usa el nuevo estándar iso.

+0

El enlace de Vash apunta a códigos ISO obsoletos. Revisé las configuraciones regionales admitidas y Collator admite sr_RS así como sr_CS heredado. El uso de sr_CS devuelve el mismo resultado. – cbaby

+0

ISO-3166 no puede estar desactualizado por definición. El enlace es de la documentación de Java. –

0

Si el orden de clasificación que desea no está disponible, puede crear su propio pedido con RuleBasedCollator. No te asustes por la documentación de esta clase. Es tan fácil como:

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

Bueno, no soluciona completamente mi problema, ya que tengo que hacer una ordenación basada en una gran cantidad de configuraciones regionales obtenidas dinámicamente, lo que significa que tendría que definir una regla que abarcaría más de 40 idiomas diferentes. Incluso si estuviera dispuesto a escribir semejante monstruo, habría sido una pesadilla aún peor mantenerlo. Opté por sustituir 'sr' con Locale similar. – cbaby

Cuestiones relacionadas