## Realizar Comparaciones Independientes de la Localidad

Se utiliza la clase Collator para realizar comparaciones independientes de la Localidad. Esta clase es sensible a la Localidad. Para ver las localidades soportadas por la clase Collator, se llama al método getAvailableLocales:

    Locale[] locales = Collator.getAvailableLocales();

Para ejemplarizar la clase Collator, se llama al método getInstance y se especifica una Localidad:

    Collator myCollator = Collator.getInstance(new Locale("en", "US"));

El método getInstance realmente devuelve un RuleBasedCollator, que es una subclase concreta de Collator. El objeto RuleBasedCollator contiene un conjunto de reglas que determinan el orden de ordenación de las cadenas para una localidad especificada. Estas reglas están predefinidas para cada localidad. Como estas reglas están encapsuladas dentro de RuleBasedCollator, los programas no necesitarán rutinas especiales para tratar con las reglas de comparación para varios idiomas.

Se llama al método Collator.compare para realizar comparaciones de cadenas independientes de la Localidad. Este método devuelve un entero menor que, igual que o mayor que cero cuando la cadena del primer argumento sea menor que, igual que o mayor que la cadena del segundo argumento.

    System.out.println(myCollator.compare("abc", "def"));
    System.out.println(myCollator.compare("rtf", "rtf"));
    System.out.println(myCollator.compare("xyz", "abc"));

Aqui puedes ver la salida del programa anterior:

    -1
    0
    1

Utilizaremos el método compare para realizar operaciones de ordenación. El programa de ejemplo, llamado CollatorDemo.java utiliza el método compare para ordenar un array de palabras Inglesas y Francesas. En este programa, veremos lo que sucede cuando se ordena un array con dos objetos Collator diferentes:

    Collator fr_FRCollator = Collator.getInstance(new Locale("fr","FR"));
    Collator en_USCollator = Collator.getInstance(new Locale("en","US"));

Nuestro método para ordenar, llamado sortStrings, puede ser utilizado con cualquier Collator. Observa que el método sortStrings llama al método compare:

    public static void sortStrings(Collator collator, String[] words) {
        String tmp;
        for (int i = 0; i < words.length; i++) {
            for (int j = i + 1; j < words.length; j++) {
                // Compare elements of the array two at a time.
                if (collator.compare(words[i], words[j] ) > 0 ) {
                    // Swap words[i] and words[j]
                    tmp = words[i];
                    words[i] = words[j];
                    words[j] = tmp;
                }
            }
        }
    }

El Collator Inglés ordena las palabras de esta forma:

    peach
    pêche
    péché
    sin

De acuerdo a las reglas de comparación del idioma Francés, la lista anterior sería errónea. En Francés, "pêche" debería seguir a "péché" en una lista ordenada. Nuestro Collator Francés ordena del array de forma correcta:

    peach
    péché
    pêche
    sin

Ozito