Somente numeros na string

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:

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

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=

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

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

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

:wink:

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.

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

[code] /**
* 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;
}[/code]

Pra retirar a máscara poderia fazer assim.public static String onlyNumber(String texto) { String number = "0123456789"; 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");

eu recebo uma string com 11 caracteres.
(“99999999999”) e quero formatar ela no meu jsp.

é isso que eu quero.

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.

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();
	}
}

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:

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

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

	}  [/code]

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 = "000.000.000-00";
   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.

Nao seria só fazer isso :

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

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

[quote=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.[/quote]

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é.

maykoone, super simples e funciona perfeitamente.