Fala galera que acompanha o blog...
Quando estamos trabalhando com strings, sempre nos deparamos com problemas clássicos, como por exemplo, comparar strings maiúsculas com minúsculas, acentuadas, com codificação diferente e até mesmo na hora de listar essas strings ordenando de forma crescente ou decrescente e por ai em diante.
Nesse post eu vou estar ensinando uma forma de comparar strings acentuadas utilizando o Collactor. Acredite ou não, no Java existe uma classe que realiza essa comparação ignorando os acentos.
Vamos utilizar como exemplo o meu nome Luíz Fágner Zordan, mas é claro que a forma original é sem acento algum. Veja essas premissas:
Luíz Fágner Zordan e Luiz Fagner Zordan são as mesmas pessoas, o que difere são os acentos;
Luiz Fágner Zordan e LUÍZ FÁGNER ZORDAN são as mesmas pessoas, o que difere são os acentos e as letras maiúsculas;
Luiz Fágner Zordan e Luiz Vagner Zordan não são as mesmas pessoas;
Veja esse código:
class CollatorEmAcao { public static void main(String[] args) { // Compara Strings, ignorando os acentos String st1 = "Luíz Fágner Zordan"; String st2 = "Luiz Fagner Zordan "; String st3 = "LUÍZ FÁGNER ZORDAN"; String st4 = "Luiz Vagner Zordan"; // Perceba que o nome está escrito errado Collator collator = Collator.getInstance (new Locale ("pt", "BR")); collator.setStrength(Collator.PRIMARY); if (collator.compare (st1, st2) == 0) { System.out.println ("Os dois Fagner são as mesmas pessoas, o que difere são os acentos"); } if (collator.compare (st1, st3) == 0) { System.out.println ("Os dois Fagner são as mesmas pessoas, o que difere são os acentos e as letras maiúsculas"); } if (collator.compare (st1, st4) != 0) { System.out.println ("Os dois Fagner não são as mesmas pessoas"); } }
Bom, vimos como comparar strings ignorando os acentos, agora vamos ordenar as strings, ignorando os acentos. Para essa segunda parte vejam o seguinte exemplo:
class CollactorEmAcao{ public static void main(String[] args) { // Ordena String, ignorando os acentos. String[] nomes = { "José Aparecido", "João Simões", "Jó Abedenego" }; // Sem o uso de "collator" o resultado deve ser: // [José Aparecido, João Simões, Jó Abedenego] // que é o contrário da língua portuguesa SortedSet<String> st1 = new TreeSet<String>(); for (String nome : nomes) { st1.add (nome); } System.out.println (st1); // Usando "collator", o resultado deve ser: // [Jó Abedenego, João Simões, José Aparecido] final Collator coll = Collator.getInstance (new Locale ("pt", "BR")); SortedSet<String> st2 = new TreeSet<String>(new Comparator<String>() { public int compare (String s1, String s2) { return coll.compare (s1, s2); } }); for (String nome : nomes) { st2.add (nome); } System.out.println (st2); } }
Sem o uso do Collactor, não é respeitada as normas corretas de ordenação, por isso a ordenação acaba ficando "errada".
É isso ai pessoal, até a próxima
Nenhum comentário:
Postar um comentário