Como só deixar números em uma string enviada?

6 respostas
Lavieri

Como só deixar números em uma string enviada ???

Digamos que
String s = "ad8sa7d89723***&777a77de²²><;;/°#$%a11123";

//como transformar "s" em

String s = "87897237777711123"; //como fazer ??

6 Respostas

lgi2020
Exemplo rápido que acabei de fazer:
package teste;

public class Main {

      public static void main(String[] args) {
        // TODO code application logic here

        String teste = "ad8sa7d89723***&777a77de²²><;;/°#$%a11123";
        StringBuffer sb = new StringBuffer();

        char [] caracteres = teste.toCharArray();

        for (Character caracter : caracteres) {
            if (Character.isDigit(caracter)) {
                sb.append(caracter);
            }
        }

        System.out.println(sb.toString());

    }
}

Explicação:
- primeiro transformamos a String (cadeia de caracteres) em um array de caracteres;
- criamos uma nova instância de um StringBuffer;
- iteramos por todos os elementos do array e, para cada elemento, utilizamos o método isDigit() da classe Character para testar se o caracter testado é um número;
- caso o caracter seja um dígito, adicionamos o mesmo ao nosso objeto StringBuffer;
- após percorrer todos os elementos, imprimimos a string armazenada no StringBuffer;

Obs: a estrutura utilizada for só funciona a partir do Java 5.

Espero que atenda suas necessidades.

Lavieri

lgi2020:
Exemplo rápido que acabei de fazer:

Obs: este for só funciona a partir do Java 5.

Espero que atenda suas necessidades.

Foda é a gambiarra, ter que percorrer a string toda… deve ter uma forma de filtrar sem precisar de for ^^

lgi2020
Lavieri:
lgi2020:
Exemplo rápido que acabei de fazer:

Obs: este for só funciona a partir do Java 5.

Espero que atenda suas necessidades.

Foda é a gambiarra, ter que percorrer a string toda... deve ter uma forma de filtrar sem precisar de for ^^

É...
Até acho que tem mesmo...
Mas não consegui pensar em nada no momento.

Dá pra ESTE código (gambiarrado) ficar com menos linhas (usando só o necessário):
public class Main {

      public static void main(String [] args) {
        
        StringBuffer sb = new StringBuffer();

        for (Character caracter : "ad8sa7d89723***&777a77de²²><;;/°#$%a11123".toCharArray())
            if (Character.isDigit(caracter)) sb.append(caracter);

        System.out.println(sb.toString());

  }
}
Abraços. :p
davidbuzatto

Usando uma expressão regular fica bem mais simples…

String s = "ad8sa7d89723***&777a77de²²><;;/°#$%a11123"; String ns = s.replaceAll( "\D*", "" ); // troca tudo que não for dígito ( \D ) por vazio. System.out.println( ns );

[]´s

Lavieri

davidbuzatto:
Usando uma expressão regular fica bem mais simples…

String s = "ad8sa7d89723***&777a77de²²><;;/°#$%a11123"; String ns = s.replaceAll( "\D*", "" ); // troca tudo que não for dígito ( \D ) por vazio. System.out.println( ns );

[]´s

isso!!! garoto!! tnks!

auhaa apesar de que, olhei dentro do ReplaceAll e o método la dentro funfa de um modo altamente complexo! e faz um while por toda a string… mas me sinto mais feliz em usar um comando de String ^^ e isso é o que vale

lgi2020

Lavieri:
davidbuzatto:
Usando uma expressão regular fica bem mais simples…

String s = "ad8sa7d89723***&777a77de²²><;;/°#$%a11123"; String ns = s.replaceAll( "\D*", "" ); // troca tudo que não for dígito ( \D ) por vazio. System.out.println( ns );

[]´s

isso!!! garoto!! tnks!

auhaa apesar de que, olhei dentro do ReplaceAll e o método la dentro funfa de um modo altamente complexo! e faz um while por toda a string… mas me sinto mais feliz em usar um comando de String ^^ e isso é o que vale

Muito melhor!!!
Com a dor de cabeça que estou, nunca iria me lembrar de replaceAll + regex… :frowning:

Show de bola.

Criado 7 de janeiro de 2009
Ultima resposta 7 de jan. de 2009
Respostas 6
Participantes 3