C'è un modo per ordinare correttamente le stringhe internazionali in Android? Io uso un comparatore personalizzato e un metodo compareTo()
, ma non è abbastanza per me. Voglio che lettere come questa "ö" siano visualizzate vicino a "o", ma tutte sono in fondo alla lista. Come posso costringere il comparatore a pensare che siano simili a "o, a, ecc ..."?Android confronta lettere speciali
7
A
risposta
15
In caso di utilizzo di stringhe sensibili alle impostazioni internazionali, utilizzare Collator
. Dalla documentazione:
Esegue confronto tra stringhe locale-sensitive. Una sottoclasse di calcestruzzo, RuleBasedCollator, consente la personalizzazione dell'ordine di confronto per l'uso di serie di regole.
Esempio di stringhe a confronto:
Collator deCollator = Collator.getInstance(Locale.GERMANY); // or new Locale("pl", "PL") for polish locale ;)
System.out.println(deCollator.compare("abcö", "abco"));
stampe 1
.
Se si desidera ordinare l'elenco delle stringhe utilizzando sopra collator, è possibile scrivere:
final List<String> strings = Arrays.asList(
"über", "zahlen", "können", "kreativ", "Äther", "Österreich");
Collections.sort(strings, deCollator); // Collator implements Comparator
System.out.println(strings);
stampe:
[Äther, können, kreativ, Österreich, über, zahlen]
EDIT: appena notato che siete polacco , esempio polacco qui sotto:
final List<String> strings = Arrays.asList(
"pięć", "piec", "Pieczka", "pięść", "pieczęć", "pieczątka");
Collections.sort(strings, Collator.getInstance(new Locale("pl", "PL")));
System.out.println(strings);
// output: [piec, pieczątka, pieczęć, Pieczka, pięć, pięść]
Problemi correlati
- 1. Stringa confronta con caratteri speciali in C#
- 2. Disattivazione di lettere alfabetiche e caratteri speciali in Visual Basic.NET
- 3. Android Sqlite Caratteri speciali
- 4. Spaziatura delle lettere su React Native - Android
- 5. PHP preg_replace caratteri speciali
- 6. escape caratteri speciali come & in android xml
- 7. Consenti solo alcune lettere, divieto caratteri speciali ($% etc.) ad eccezione di altri (' -)
- 8. lettere Partita alfa e lettere accentate alfa
- 9. Come convertire lettere maiuscole in lettere minuscole
- 10. Cerca caratteri speciali (/ * - + _ @ & $ #%) in una stringa?
- 11. Espressione regolare per corrispondere solo alle lettere
- 12. Android confronta due suoni per la corrispondenza fonetica
- 13. Come mostrare le lettere alfabetiche sul lato di Android ListView
- 14. Lettere RTL (arabo-persiano) Messed up nell'editor di Android Studio
- 15. bash - incrementare le variabili che contengono lettere
- 16. Caratteri speciali tra applicazione Android e script PHP
- 17. Come inserire caratteri speciali come testo nell'editor XML per Android?
- 18. caratteri speciali sono sostituisce con una piazza di app Android
- 19. caratteri speciali (@,?) Come XML-string in applicazione android
- 20. Regex sostituire lettere maiuscole con lettere minuscole in PhpStorm
- 21. Is getSimCountryIso restituisce 3 lettere o 2 lettere Codice ISO
- 22. lettere sostitutive con il corrispondente set di lettere
- 23. Ramo SVN confronta
- 24. Java confronta due mappe
- 25. Confronta date con Parse.com
- 26. java Confronta due date
- 27. Confronta due risultati fxcop
- 28. Confronta valori enum Java
- 29. DateTime Confronta C#
- 30. Confronta implementazioni JSF
Grazie per la tua ottima risposta! ;) In realtà, ho trovato una soluzione ancora più semplice: 'Collator collator = Collator.getInstance(); collator.setDecomposition (Collator.CANONICAL_DECOMPOSITION); collator.compare (uno, due) 'Il secondo esempio qui mostra cosa fa la regola' CANONICAL_DECOMPOSITION': http://developer.android.com/reference/java/text/Collator.html – lomza
Attenzione, 'Collator.getInstance () 'senza esplicito' Locale' è dipendente dall'ambiente: esso restituisce un'istanza di Collator che è appropriata per le ** impostazioni internazionali predefinite dell'utente **. Vedi "[Diffida delle impostazioni internazionali predefinite] (http://developer.android.com/reference/java/util/Locale.html#default_locale)" ._ – Xaerxess
Grazie per l'avviso, ma ora sono in dubbio. Ho bisogno di dati ordinati solo per la visualizzazione all'utente, non per inviarlo da qualche parte o per calcolare qualcosa ... Quindi probabilmente le impostazioni locali predefinite sono sufficienti? Ma se mi piacerebbe ordinare correttamente i caratteri tedeschi e danesi e usarli come output della macchina, la scelta migliore sarebbe usare il locale 'Local.US'? – lomza