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