Remover acentuao

09/04/2009

4

Ol pessoal, tudo bom. eu estou com uma duvida, pois estou desenvolvendo uma regra de negcios e gostaria de saber se do jeito que eu fiz a melhor prtica. Como o Mysql, no suporta caracteres especiais como acentuao, 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 prtica, ou tem outro jeito mais usado em Java. Obrigado a todos
Responder

Posts

Particularmente prefiro da forma como voc fez, utilizando [b]expresses regulares[/b]. Mas quem estiver desenvolvendo cdigo para uma mquina virtual de [b]verso inferior 1.4[/b] ou ento para [b]J2ME[/b], ter de utilizar solues 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 no suporta caracteres especiais? Qual verso est utilizando? E mais importante, qual charset encoding voc est usando? Se precisar de mais informaes 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 soluo:
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 cdigo acima para incluir tratamento de maisculas:
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 soluo um pouco mais simples, o java.text.Normalizer, ele substitui os acentos, porm deixa umas sujeiras no string, mas para resolver isto, um replaceAll removendo todos os caracteres lixo resolve a situao.
String input = "alda";
input = Normalizer.normalize(input, Normalizer.Form.NFD);
input = input.replaceAll("[^\\p]", "");
System.out.println(input);
:!:
Responder

12/08/2009

Flvio Mendes

Ento cara, acredito que MySql aceita caracteres especiais sim. Caso no esteja aceitando tente configurar o Encoding. Tente colocar UTF8. Abrao!
Responder
public static String removeAccents(String str) {

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

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

    return str;

}
Responder