Como fazer ordenação de uma lista de String com acentos em Java
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Como fazer ordenação de uma lista de String com acentos em Java
Olá Amigos, esta semana um aluno precisou ordenar uma lista de nomes com acentos em Java e me pediu uma solução possível para o problema. Esta atividade é relativamente comum em nosso idioma, pois temos a ocorrência de várias palavras acentuadas. Quando a JVM está configurada para o LOCALE correto – Português (pt-BR) não temos problemas com a ordenação de String. O ruim é quando temos alguns caracteres especiais como “¨”, “º” entre outros.
Quando utilizamos a abordagem padrão o Java acaba considerando o Caracter Enconding configurado na JVM que muitas vezes é diferente do idioma padrão dos usuários. Para resolver este problema API do Java temos a classe Collator. Faremos um exemplo prático para entendermos como resolver o problema.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package br.com.feltex.jse.colecao; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MeuCollator{ public static void main(String[] args) { List<String> lista = new ArrayList<>(); lista.add("über"); lista.add("Äther"); lista.add("kreativ"); lista.add("zahlen"); lista.add("können"); lista.add("Österreich"); lista.add("Löhnhoff"); lista.add("Dähne"); lista.add("Büscher"); lista.add("Möde"); lista.add("Müller"); lista.add("Linsenbröder"); lista.add("Lúkin"); System.out.println("Ordem de inclusão: " + lista); // Realiza a ordenação dos itens Collections.sort(lista); System.out.println("Ordem de Simples: " + lista); Collator collator = Collator.getInstance(); collator.setStrength(Collator.PRIMARY); Collections.sort(lista, collator); System.out.println("Ordem com Collator: " + lista); } } |
As saídas serão:
1 2 | Ordem de inclusão: [über, Äther, kreativ, zahlen, können, Österreich, Löhnhoff, Dähne, Büscher, Möde, Müller, Linsenbröder, Lúkin] |
1 2 | Ordem de Simples: [Büscher, Dähne, Linsenbröder, Löhnhoff, Lúkin, Möde, Müller, kreativ, können, zahlen, Äther, Österreich, über] |
1 2 | Ordem com Collator: [Äther, Büscher, Dähne, können, kreativ, Linsenbröder, Löhnhoff, Lúkin, Möde, Müller, Österreich, über, zahlen] |
Você pode definir a propriedade para força de um Collator a determinar o nível de diferença considerada significativa nas comparações. Quatro pontos fortes são fornecidos: PRIMARY, SECONDARY, TERTIARY, and IDENTICAL (Primário, Secundário, Terciário, e Idênticos). A atribuição exata dos pontos fortes de recursos de linguagem é depende do locale. Por exemplo, em checo, "e" e "f" são considerados principais diferenças, enquanto o "e" e "ê" diferenças secundárias, "e" e "E" são diferenças terciárias e "e" e "e" são idênticos .
Estes resultados foram obtidos ao trabalhar com uma lista de String na versão 7 do Java. Atenção para a sintaxe
“List
Caso utilize uma versão anterior utilize a sintaxe
1 | List<String> lista = new ArrayList<String>(); |
Links externos
Classe Collator
Ordenação de Lista de objetos em Java
Abraços e por hoje é só! Vida que segue!
Deixe um comentário
Você precisa fazer o login para publicar um comentário.