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

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

Digamos que

[code]
String s = “ad8sa7d89723***&777a77de²²><;;/°#$%a11123”;

//como transformar “s” em

String s = “87897237777711123”; //como fazer ??[/code]

Exemplo rápido que acabei de fazer:

[code]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());

}

}
[/code]

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.

[quote=lgi2020]Exemplo rápido que acabei de fazer:

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

Espero que atenda suas necessidades.[/quote]

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

[quote=Lavieri][quote=lgi2020]Exemplo rápido que acabei de fazer:

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

Espero que atenda suas necessidades.[/quote]

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

É…
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):

[code]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());

}
}
[/code]
Abraços. :stuck_out_tongue:

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

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

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

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

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

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

Show de bola.