terça-feira, janeiro 03, 2006

Acentuação sem acento

Um método simples para trocar as palavras com acento para sem acento.
É um método comum, mas sempre estou precisando em algum lugar, logo é melhor deixar aqui para evitar escrever de novo

public class StringUtils {

public static String replaceSpecialCaracter(String specialString) {
if (specialString == null) {
return specialString;
}
char[] special = new char[] { 'ç', 'á', 'à', 'ã', 'â', 'ä', 'é', 'è',
'ê', 'ë', 'í', 'ì', 'î', 'ï', 'ó', 'ò',
'õ', 'ô', 'ö', 'ú', 'ù', 'û', 'ü' };

char[] normal = new char[] { 'c', 'a', 'a', 'a', 'a', 'a', 'e', 'e',
'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o',
'o', 'o', 'o', 'u', 'u', 'u', 'u' };
for (int i = 0; i < special.length; i++) {
specialString = specialString.replace(special[i], normal[i]);
specialString = specialString.replace(Character.toUpperCase(special[i]),
Character.toUpperCase(normal[i]));
}
return specialString;
}
}

Um comentário:

Marlus disse...

Uma outra implementação, diferente, acho que nem muito melhor e nem muito pior, mas bom pra lembrar...

public static String removeAccents(String text) {
Map accents = new HashMap();
Map replacements = new HashMap();

//Letters with their accented variations
replacements.put("?", "ðÞ");
replacements.put("A", "ÂÀÁÄÃÅ");
replacements.put("C", "Ç");
replacements.put("E", "ÉËÈÊ");
replacements.put("I", "ÏÍÎÌ");
replacements.put("N", "Ñ");
replacements.put("O", "ÖÕÒÔØÓ");
replacements.put("U", "ÚÛÜÙ");
replacements.put("a", "áàâåäã");
replacements.put("ae", "æ");
replacements.put("c", "ç");
replacements.put("e", "ëêèé");
replacements.put("i", "ïìíî");
replacements.put("n", "ñ");
replacements.put("o", "öõøôóò");
replacements.put("ss", "ß");
replacements.put("u", "ûúù");

//Prepare hash
Iterator entries = replacements.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();

String replacement = (String) entry.getKey();
String toReplace = (String) entry.getValue();
for (int i = 0; i < toReplace.length(); i++) {
accents.put(toReplace.substring(i, i + 1), replacement);
}
}

text = replaceStrings(text, accents);

return text;
}

public static String replaceStrings(String text, Map replacements) {
if (text == null || text.equals("")) return text;

Iterator entries = replacements.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();

text = text.replaceAll(key, value);
if (key.matches("%[^%]+%")) {
key = "\\?" + key.replaceAll("%", "").toUpperCase() + "\\??";
text = text.replaceAll(key, value);
}
}
return text;
}