Substituir caracteres acentuados em uma string

2 respostas
joseguilherme

Saudaçõesa amigos,

Estou fazendo uma impressão em matricial e preciso substituir os caracteres acentuados pelos seus respectivos sem acento. Testei destas duas maneiras:
/**  */
    private final char[] comAcento = 
            "ãâàáäêèéëîìíïõôòóöûúùüÃÂÀÁÄÊÈÉËÎÌÍÏÕÔÒÓÖÛÙÚÜçÇñÑ".toCharArray();
    
    /**  */
    private final char[] semAcento = 
            "aaaaaeeeeiiiiooooouuuuAAAAAEEEEIIIIOOOOOUUUUcCnN".toCharArray();

    public String convertToASCII(String text) {
        for (int i = 0; i < comAcento.length; i++) {
            text = text.replace(comAcento[i], semAcento[i]);
        }
        return text;
    }
public String convertToASCII2(String text) {
        return text.replaceAll("[ãâàáä]", "a")
                    .replaceAll("[êèéë]", "e")
                    .replaceAll("[îìíï]", "i")
                    .replaceAll("[õôòóö]", "o")
                    .replaceAll("[ûúùü]", "u")
                    .replaceAll("[ÃÂÀÁÄ]", "A")
                    .replaceAll("[ÊÈÉË]", "E")
                    .replaceAll("[ÎÌÍÏ]", "I")
                    .replaceAll("[ÕÔÒÓÖ]", "O")
                    .replaceAll("[ÛÙÚÜ]", "U")
                    .replace('ç', 'c')
                    .replace('Ç', 'C')
                    .replace('ñ', 'n')
                    .replace('Ñ', 'N');
    }

O segundo método parece ser um milésimo mais rápido que o primeiro para uma string de 48 caracteres.

Existe alguma maneira melhor de fazer isto?
Se eu tiver que alterar isto de um arquivo seria melhor ler partes do arquivo, converter e gravar um arquivo novo?

abraço

2 Respostas

Pedrosa

Expressão Regular de uma olhada nesse tutorial:

http://www.guj.com.br/java.tutorial.artigo.1.1.guj

Nesse exemplo só aceita numeros e letras sem acentuação:

public String removeCaracters(String entrada){
	     Pattern numericos = Pattern.compile("[0-9a-z]",Pattern.CASE_INSENSITIVE);
	     Matcher encaixe = numericos.matcher(entrada);
	     StringBuffer saida = new StringBuffer();
	     while(encaixe.find())
	        saida.append(encaixe.group());
	     return saida.toString();
}
joseguilherme

Valeu amigo, vou dar uma estudada nesse java.util.regex.

Criado 14 de novembro de 2006
Ultima resposta 14 de nov. de 2006
Respostas 2
Participantes 2