Remover acentuação
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.
essa é a melhor prática, ou tem outro jeito mais usado em Java.
Obrigado a todos
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;
}
}Rodrigo
Curtidas 0
Respostas
Ricardo Staroski
09/04/2009
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);
}
GOSTEI 0
Marco Biscaro
09/04/2009
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]
GOSTEI 0
Dalton
09/04/2009
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;
}
}GOSTEI 0
Valdemar Neto
09/04/2009
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;
}
}
GOSTEI 0
Vagner Huzalo
09/04/2009
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);
GOSTEI 0
Flávio Mendes
09/04/2009
Então cara, acredito que MySql aceita caracteres especiais sim. Caso não esteja aceitando tente configurar o Encoding. Tente colocar UTF8.
Abraço!
GOSTEI 0
Cristiani Oliveira
09/04/2009
public static String removeAccents(String str) {
str = Normalizer.normalize(str, Normalizer.Form.NFD);
str = str.replaceAll("[^\\p]", "");
return str;
}
GOSTEI 0