segunda-feira, 17 de setembro de 2007

Extrair um valor utilizando String.replaceAll()

Há pouco tempo, eu e o Highlander postamos coisas baseadas em JFormattedTextField. Muitas das coisas que são colocadas em JFTF são posteriormente armazenadas em banco de dados ou arquivos de texto (alguém ainda usa arquivo de texto pra armazenar coisas).

Porém, é semanticamente errado armazenar um telefone ou um cpf utilizando Varchar (ou algo semelhante). Por isso, é necessário extrair a parte numérica da String, pra depois poder utilizá-la da maneira correta.

Aqui vai um jeito simples de extrair coisas, usando o método replaceAll:

Exemplo: extrair os números de um cpf:


String cpf = "123.456.789-10";
cpf = cpf.replaceAll("[\\D]", "");
int tal = Integer.parseInt(cpf);


No caso, eu usei o \D (o Java considera a barra invertida um caracter especial, usado em caracteres de escape, então é preciso inserir duas barras, pra ele considerar uma).

O replaceAll faz a substituição de um pedaço da String por outro, utilizando expressões regulares. No código acima, poderia ter sido utilizado a seguinte expressão:

cpf.replaceAll("[^0-9]", "");

ou seja, tudo que não estiver na faixa entre 0 e 9.

Aqui vão alguns macetes de expressões regulares:

[] (colchetes) - Agrupadores.
^ (acento circunflexo) - Negação.
. (ponto) - Qualquer caracter.
- (hífen) - Indica faixa de caracteres. 0-4 equivale a 0,1,2,3,4, por exemplo.
\\d - Todos os dígitos de uma String. Equivale a [0-9].
\\D - Todos os não-dígitos de uma String. Equivale a [^0-9].
\\s - Caracteres "whitespace" (espaço, tab, retorno de carro, etc).
\\S - Caracteres "não-whitespace". Equivale a [^\\s].
\\w - Letras, números e "_". Equivale a [_0-9a-zA-Z].
\\W - Outros caracteres. Equivale a [^\\w]

Esses daí são os principais. Se quiser saber mais sobre expressões regulares em Java, aqui tem um tutorial bem interessante, feito pela Sun...

Té mais
o/

Nenhum comentário: