Forma fácil de transformar ó em o, á em a, ç em c etc

Pessoal,

Vou precisar comparar textos ignorando acentos e caracteres como “ç”. A idéia inicial é aplicar uma regex e trocar os caracteres acentuados e similares por seus respectivos na tabela ASC básica. O problema é que a regex teria que tratar cada um deles isoladamente e acho que a forma como fiz vai gerar muito processamento desnecessário.

	public String normalizar(String valor) {
		String result = valor;
		result = result.replaceAll("á|à|ã|ä", "a");
		result = result.replaceAll("Á|À|Â|Ä", "A");		
		result = result.replaceAll("ç", "c");
		result = result.replaceAll("Ç", "C");
		return result;
	}

Alguma idéia pra fazer isso mais rápido e mais fácil?

O que vc pode fazer é verificar se esta fora da tabela ASCII padrão.
Assim.


public class Test{
	public static void main(String[] args) {
		System.out.println(normalizar("ááã"));
	}
	public static String normalizar(String valor) {
 		StringBuffer sb = new StringBuffer(valor);
		for (int i = 0; i < sb.length(); i++) {
			char c=sb.charAt(i);
			c=converter(c);
			sb.setCharAt(i,c);
		}
		return sb.toString();
		
 	}
	private static char converter(char c) {
		int nc=(int)c;
		if(nc<127){
			return c;
		}else if(nc>130&&nc<135){
			return 'a';
		}else if ...
	}

}

Acho que é mais rapido mas não sei se é mais facil.
:lol:

Achei isso aki uma vez e achei interessante, pode ser que resolva seu problema…

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#getBytes(java.lang.String) .

De lá vc vai na classe CharsetEncoder…

Transforma sua string em um array de bytes, + usando o charset apropriado, deve ter suporte à sua necessidade.

**editado
Procurando + um bocado , achei isso:
http://www-128.ibm.com/developerworks/java/library/j-text-searching.html

Sim! A API do ICU4J faz isso para você da maneira correta. Ela usa as regras de collation do unicode.

dê uma olhada aqui
Unaccent letters

[]´s
Rodrigo

Eu acho que o LIPE tinha indicado um plugin do Eclipse que fazia isso, ele inclusive transformava das letras acentuadas pra entities XML. Mas eu tireo o eclipse velho daqui e esqueci de olhar esse plugin… :frowning: