Remover acentuação

09/04/2009

0

Olá pessoal, tudo bom. eu estou com uma duvida, pois estou desenvolvendo uma regra de negócios e gostaria de saber se do jeito que eu fiz é a melhor prática. Como o Mysql, não suporta caracteres especiais como acentuação, eu fiz um classe assim.
public class TrataCaracter {
	
	public String trata (String passa){
		passa = passa.replaceAll("[ÂÀÁÄÃ]","A");
		passa = passa.replaceAll("[âãàáä]","a");
		passa = passa.replaceAll("[ÊÈÉË]","E");
		passa = passa.replaceAll("[êèéë]","e");
		passa = passa.replaceAll("ÎÍÌÏ","I");
		passa = passa.replaceAll("îíìï","i");
		passa = passa.replaceAll("[ÔÕÒÓÖ]","O");
		passa = passa.replaceAll("[ôõòóö]","o");
		passa = passa.replaceAll("[ÛÙÚÜ]","U");
		passa = passa.replaceAll("[ûúùü]","u");
		passa = passa.replaceAll("Ç","C");
		passa = passa.replaceAll("ç","c"); 
		passa = passa.replaceAll("[ýÿ]","y");
		passa = passa.replaceAll("Ý","Y");
		passa = passa.replaceAll("ñ","n");
		passa = passa.replaceAll("Ñ","N");
		passa = passa.replaceAll("['<>\\|/]","");
		return passa;
	}

}
essa é a melhor prática, ou tem outro jeito mais usado em Java. Obrigado a todos
Rodrigo

Rodrigo

Responder

Posts

09/04/2009

Ricardo Staroski

Particularmente prefiro da forma como você fez, utilizando [b]expressões regulares[/b]. Mas quem estiver desenvolvendo código para uma máquina virtual de [b]versão inferior à 1.4[/b] ou então para [b]J2ME[/b], terá de utilizar soluções alternativas como por exemplo:
public String trata (String passa){
    char[] array = passa.toCharArray();
    for (int i = 0; i< array.length; i++) {
        switch (array[i]) {
            case 'Â' :
            case 'À' :
            case 'Á' :
            case 'Ä' :
            case 'Ã' :
                array[i] = 'A';
                continue;
            //
            // Mais os outros case's...
            //
        }
    }
    return new String(array);
}
Responder

09/04/2009

Marco Biscaro

Tem certeza que MySQL não suporta caracteres especiais? Qual versão está utilizando? E mais importante, qual charset encoding você está usando? Se precisar de mais informações sobre charset encoding, leia [url]http://blog.caelum.com.br/2006/10/22/entendendo-unicode-e-os-character-encodings/[/url]
Responder

09/04/2009

Dalton

Outra solução:
package org.javabb.infra;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CharFilter {

	public static String[] REPLACES = { "a", "e", "i", "o", "u", "c" };

	public static Pattern[] PATTERNS = null;
	
	public static void compilePatterns() {
		PATTERNS = new Pattern[REPLACES.length];
		PATTERNS[0] = Pattern.compile("[âãáàä]", Pattern.CASE_INSENSITIVE);
		PATTERNS[1] = Pattern.compile("[éèêë]", Pattern.CASE_INSENSITIVE);
		PATTERNS[2] = Pattern.compile("[íìîï]", Pattern.CASE_INSENSITIVE);
		PATTERNS[3] = Pattern.compile("[óòôõö]", Pattern.CASE_INSENSITIVE);
		PATTERNS[4] = Pattern.compile("[úùûü]", Pattern.CASE_INSENSITIVE);
		PATTERNS[5] = Pattern.compile("[ç]", Pattern.CASE_INSENSITIVE);
	}

	public static String replaceSpecial(String text) {
		if(PATTERNS == null){
			compilePatterns();
		}

		String result = text;
		for (int i = 0; i < PATTERNS.length; i++) {
			Matcher matcher = PATTERNS[i].matcher(result);
			result = matcher.replaceAll(REPLACES[i]);
		}
		return result;
	}

}
Responder

15/05/2009

Valdemar Neto

Alterei o código acima para incluir tratamento de maiúsculas:
package br.com.liquigas.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtils {

	public static String[] REPLACES = { "a", "e", "i", "o", "u", "c", "A", "E", "I", "O", "U", "C" };

	public static Pattern[] PATTERNS = null;

	public static void compilePatterns() {
		PATTERNS = new Pattern[REPLACES.length];
		PATTERNS[0]  = Pattern.compile("[âãáàä]");
		PATTERNS[1]  = Pattern.compile("[éèêë]");
		PATTERNS[2]  = Pattern.compile("[íìîï]");
		PATTERNS[3]  = Pattern.compile("[óòôõö]");
		PATTERNS[4]  = Pattern.compile("[úùûü]");
		PATTERNS[5]  = Pattern.compile("[ç]");
		PATTERNS[6]  = Pattern.compile("[ÂÃÁÀÄ]");
		PATTERNS[7]  = Pattern.compile("[ÉÈÊË]");
		PATTERNS[8]  = Pattern.compile("[ÍÌÎÏ]");
		PATTERNS[9]  = Pattern.compile("[ÓÒÔÕÖ]");
		PATTERNS[10] = Pattern.compile("[ÚÙÛÜ]");
		PATTERNS[11] = Pattern.compile("[Ç]");
	}

	private StringUtils() {
	}

	/**
	 * Substitui os caracteres acentuados por nao acentuados.
	 * 
	 * @param text
	 * @return
	 */
	public static String replaceSpecial(String text) {
		if (PATTERNS == null) {
			compilePatterns();
		}

		String result = text;
		for (int i = 0; i < PATTERNS.length; i++) {
			Matcher matcher = PATTERNS[i].matcher(result);
			result = matcher.replaceAll(REPLACES[i]);
		}
		return result;
	}
}
Responder

31/07/2009

Vagner Huzalo

Pessoal, eu uso uma solução um pouco mais simples, o java.text.Normalizer, ele substitui os acentos, porém deixa umas sujeiras no string, mas para resolver isto, um replaceAll removendo todos os caracteres lixo resolve a situação.
String input = "çaláda";
input = Normalizer.normalize(input, Normalizer.Form.NFD);
input = input.replaceAll("[^\\p]", "");
System.out.println(input);
:!:
Responder

12/08/2009

Flávio Mendes

Então cara, acredito que MySql aceita caracteres especiais sim. Caso não esteja aceitando tente configurar o Encoding. Tente colocar UTF8. Abraço!
Responder

16/04/2013

Cristiani Oliveira

public static String removeAccents(String str) {

    str = Normalizer.normalize(str, Normalizer.Form.NFD);

    str = str.replaceAll("[^\\p]", "");

    return str;

}
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar