Fala galera que acompanha o blog...
Estava criando uma classe de utilitários, que logo pretendo disponibilizar aqui no blog, e acabei encontrando uma forma muito elegante de remover acentos de uma string utilizando o Normalize.
Se você pesquisar algo como "como remover acentos de uma string", vai perceber que existem diversas formas de faze-lo, usando arrays, mapa de caracteres, usando a biblioteca Apache Commons Lang, replaceAll com regex, indexOf() e várias outras formas. No entanto a classe Normalize, foi a que me chamou mais atenção, veja o código abaixo:
package com.devic.main; import java.text.Normalizer;
public class Main {
public static void main(String[] args) { String entrada = "çÇáéíóúýÁÉÍÓÚÝàèìòùÀÈÌÒÙãõñäëïöüÿÄËÏÖÜÃÕÑâêîôûÂÊÎÔÛ"; System.out.println(Normalizer.normalize(entrada, Normalizer.Form.NFKD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "")); } }
Saida:
cCaeiouyAEIOUYaeiouAEIOUaonaeiouyAEIOUAONaeiouAEIOU
Bonito, não?
Esse trecho de código possui duas etapas:
- Normalizar a nossa string seguindo o tipo de normalização enviado como parâmetro;
- Realizar o replace de todos os caracteres normalizados para a sua forma normal.
Vamos ver outro código para entender melhor o que está acontecendo:
String entrada = "aáeéiíoóöőuúüű AÁEÉIÍOÓÖŐUÚÜŰ"; for (int i = 0; i < entrada.length(); i++) {
// nos iremos escrever cada caracter separado, para visualizar melhor como ele funciona String texto = original.substring(i, i + 1);
// realizando a normalização String decomposto = Normalizer.normalize(texto, Form.NFD);
// removing diacritics String removido = decomposto.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); System.out.println(texto + " (" + asHex(texto) + ") -> " + decomposto + " (" + asHex(decomposto) + ") -> " + removido + " (" + asHex(removido) + ")"); }
E a saída, ficará assim:
a (0061 ) -> a (0061 ) -> a (0061 ) á (00e1 ) -> á (0061 0301) -> a (0061 ) e (0065 ) -> e (0065 ) -> e (0065 ) é (00e9 ) -> é (0065 0301) -> e (0065 ) i (0069 ) -> i (0069 ) -> i (0069 ) í (00ed ) -> í (0069 0301) -> i (0069 ) o (006f ) -> o (006f ) -> o (006f ) ó (00f3 ) -> ó (006f 0301) -> o (006f ) ö (00f6 ) -> ö (006f 0308) -> o (006f ) ő (0151 ) -> ő (006f 030b) -> o (006f ) u (0075 ) -> u (0075 ) -> u (0075 ) ú (00fa ) -> ú (0075 0301) -> u (0075 ) ü (00fc ) -> ü (0075 0308) -> u (0075 ) ű (0171 ) -> ű (0075 030b) -> u (0075 ) (0020 ) -> (0020 ) -> (0020 ) A (0041 ) -> A (0041 ) -> A (0041 ) Á (00c1 ) -> Á (0041 0301) -> A (0041 ) E (0045 ) -> E (0045 ) -> E (0045 ) É (00c9 ) -> É (0045 0301) -> E (0045 ) I (0049 ) -> I (0049 ) -> I (0049 ) Í (00cd ) -> Í (0049 0301) -> I (0049 ) O (004f ) -> O (004f ) -> O (004f ) Ó (00d3 ) -> Ó (004f 0301) -> O (004f ) Ö (00d6 ) -> Ö (004f 0308) -> O (004f ) Ő (0150 ) -> Ő (004f 030b) -> O (004f ) U (0055 ) -> U (0055 ) -> U (0055 ) Ú (00da ) -> Ú (0055 0301) -> U (0055 ) Ü (00dc ) -> Ü (0055 0308) -> U (0055 ) Ű (0170 ) -> Ű (0055 030b) -> U (0055 )
É isso ai pessoal, espero que tenham gostado e que seja bastante útil ai no projeto de vocês.
Até a próxima!
Nenhum comentário:
Postar um comentário