2014-10-17 8 views
9

Qualcuno sa come ordinare un array con parole con caratteri speciali come accenti?Ordinare un array con caratteri speciali come accenti

Arrays.sort(anArray);

rendimenti 'Albacete' prima 'Álava', e voglio 'Álava' prima 'Albacete'.

Grazie mille

+1

Devi scrivere il tuo 'comparatore 'e passarlo a' Arrays.sort() '. Per impostazione predefinita, le stringhe sono ordinate in base a * Ordine naturale *. – TheLostMind

risposta

10

Se si desidera solo per ordinare le stringhe come se non avessero gli accenti, è possibile utilizzare il seguente:

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     o1 = Normalizer.normalize(o1, Normalizer.Form.NFD); 
     o2 = Normalizer.normalize(o2, Normalizer.Form.NFD); 
     return o1.compareTo(o2); 
    } 
}); 

questione connessa:

Per casi d'uso più sofisticati, leggere il java.text.Collator. Ecco un esempio:

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     Collator usCollator = Collator.getInstance(Locale.US); 
     return usCollator.compare(o1, o2); 
    } 
}); 

Se nessuna delle regole di confronto predefinite soddisfa le proprie esigenze, è possibile provare a utilizzare il java.text.RuleBasedCollator.

+0

(nota che puoi cambiare da 'Collections.sort' a' Arrays.sort' se stai lavorando con matrici e non liste.) – aioobe

0

Si dovrebbe dare un'occhiata a RuleBasedCollator

classe RuleBasedCollator è una sottoclasse concreta di Collator che fornisce un semplice, data-driven, tavolo raccoglitrice. Con questa classe è possibile creare un Collator basato su tabella personalizzato con . RuleBasedCollator mappa caratteri per ordinare le chiavi.

RuleBasedCollator ha le seguenti limitazioni per l'efficienza (altre sottoclassi possono essere utilizzati per le lingue più complesse):

Se viene specificata una speciale regola di confronto controllato da un esso vale per l'intero oggetto raccoglitrice. Tutti i caratteri non menzionati sono alla fine dell'ordine di confronto.