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
![[Debug] Comparar/Listar Strings acentuadas usando Collactor [Debug] Comparar/Listar Strings acentuadas usando Collactor](http://www.deviscoming.hol.es/devic/postImg/000017%20-%20DEBUG.jpg)
Nenhum comentário:
Postar um comentário