Somente numeros na string

18 respostas
F

Ola pessoal,
Estou recebendo umas string em minha servlet que possui varios caracteres alem de numeros e gostaria de filtrar essa string deixando apenas números nela, pois a coluna da tabela é do tipo integer.
Aproveitando, quando eu voltar da DB para a tela em outra situação, tambem quero converter os numeros em um formato especifico, como proceder?

Trata-se de cpf. :frowning:

18 Respostas

_

Para filtrar, voce pode varrer a String procurando os numeros, com if (Character.isDigit()) por exemplo…

ou pode procurar expressoes regulares, caso seja algo mais regular e repetitivo…

para formatar os numeros, veja isto:

http://www.exampledepot.com/egs/java.text/FormatNum.html

M

uma coisa que é legal tb se tratando de cpf, é vc verificar se é valido, tem varias classes por ai em javascript fazendo isso, acha-se facil na net…

eu não lembro direito a regra por isso nem falo, é um negocio com a conta de todos os numeros exceto pelos dois ultimos, que vai gera um determinado resultado que tem que ser esses 2 ultimos digitos.

dando uma googada ja achei alguns resultados uteis nos primeiros resultados

http://www.google.com/search?hl=pt-BR&client=opera&rls=pt-br&hs=7Mq&q=gerador+validador+cpf+codigo&btnG=Pesquisar&lr=

M

hmmm Expressoes ruglares… saber isso pode te polpar algum tempo :slight_smile:
e para validar use o BrazilUtils :wink:

F

mas no caso a variável que eu quero formatar é do tipo string, funciona da mesma forma?

M

Sim…
Oque voce vai precisar para expressoes regulares esta no pacote java.util.regex
Oque é e como usar RegExp Aqui.

:wink:

F

olha eu ja tenho um javascript pra validar.
Eu só preciso formatar a string que to recebendo em um formato de cpf.

exemplo.

format(${string},"###.###.###-##");

alguma coisa do tipo.
alguem me da uma luz, preciso disso pro projeto final da facult.

X

Tipo, vc receber uma String 000.000.000.00-00

vc pode utilizar o metodo abaixo, soh q duas vezes. uma para retirar os "." e outra para retirar o "-", depois converte num Integer
/**
	 * Substitui todos vl1 por vl2 do texto.
	 * @param frase 
	 * @param vl1
	 * @param vl2
	 * @return
	 */
	public static String replaceAll(String texto, String vl1, String vl2) {
		
		boolean continua = true;
		String textoSubstituido = texto;
		while (continua) {
			int posInicial = texto.indexOf(vl1);
			if (posInicial != -1) {
			    textoSubstituido = texto.substring(0,posInicial);
			    textoSubstituido += vl2;
			    textoSubstituido += texto.substring(posInicial+vl1.length());
			    texto = textoSubstituido;
			} else {
				continua = false;
			}
		}
		return textoSubstituido;
	}
R

Pra retirar a máscara poderia fazer assim.public static String onlyNumber(String texto) { String number = "[telefone removido]"; StringBuffer sb = new StringBuffer(); for(int i = 0; i < texto.length(); i++){ if(number.indexOf(texto.charAt(i)) != -1){ sb.append(texto.charAt(i)); } } return sb.toString(); } onlyNumber("000.000.000.00-00");

F

eu recebo uma string com 11 caracteres.
(“[telefone removido]”) e quero formatar ela no meu jsp.

é isso que eu quero.

V

Não é mais fácil converte-la para um número e usar um formatador de números?

Use:

Long numeroLong = Long.parseLong(suaString);

ou

Integer numeroInt = Integer.parseInt(suaString);

E depois divirta-se com as classes NumberFormat ou String.printf.

D

Utilizo esta aqui…

public class OnlyNumbers {
	
	public static String getNumbers(String value) {
		StringBuffer result = new StringBuffer();

		for (int i = 0; i < value.length(); i++)
			if (Character.isDigit(value.charAt(i)))
				result.append(value.charAt(i));

		return result.toString();
	}
}
V

Oi Diego, por favor, use as tags code para postar código-fonte aqui no fórum. Se possível, edite o seu post ali em cima, para ficar bonitão (sintax coloring, tabulado, etc).

Se não sabe usar o recurso ainda, dá uma lida aqui:
http://www.guj.com.br/posts/list/50115.java

:wink:

F

Se puder usar expressão regular faça assim.

public string GetOnlyNumbers(string str)
		{
			try
			{
				Regex reg = new Regex("[^0-9]");
				str = reg.Replace(str, "");
				return str;
			}
			catch (Exception ex)
			{
				return "";
			}
			
		}
M

sei que faz tempo que esse tópico tá parado, mas tava precisando de algo parecido, acabei me virando com
a api de expressões regulares do java, pensei em compartilhar para ajuda da comunidade.

String cpf = "[CPF removido]";
   String somenteNumeros = Pattern.compile("[^0-9]").matcher(cpf).replaceAll("");

Coloquei tudo em poucas linhas, mas só para deixar claro, primeiro eu compilo o regex, no caso, qualquer coisa menos o
intervalo de números, depois eu passo a string a qual eu quero aplicar o regex e por fim substituo tudo que bater com a
expressão por string vazia.

R

Nao seria só fazer isso :

String value = "adsfkjalskdjfxxx465465456xxxxx";
return value.replaceAll("\\D", "");
M

Verdade!

vi na documentação http://download.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29
que o replaceAll da String faz exatamente o que eu mostrei anteriormente.

Vlw

R

Frumello:
olha eu ja tenho um javascript pra validar.
Eu só preciso formatar a string que to recebendo em um formato de cpf.

exemplo.

format(${string},"###.###.###-##");

alguma coisa do tipo.
alguem me da uma luz, preciso disso pro projeto final da facult.

dica_1: É bom vc tb validar no servidor, javascript é muito fácil de burlar.
dica_2: Vc pode utilizar validações do próprio hibernate ou jee,

@Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
        +"[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"
        +"(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?",
             message="{bundle.email}")
    protected String email;

inté.

T

maykoone, super simples e funciona perfeitamente.

Criado 3 de dezembro de 2007
Ultima resposta 20 de out. de 2011
Respostas 18
Participantes 13