String para filtrar letras aceitar apenas numeros

Olá pessoal queria uma ajuda,comecei semestre passado Ciëncia da Computaçäo e gostaria de aprender Java estou pesquisando e estudando pela net achei varios topicos interessantes nesse forum.
Agora gostaria de contar com a ajuda de vcs tranquei em uma parte do meu programa onde gostaria de ler apenas numeros,uma parte ate ja consegui, que é fazer ele aceitar apenas o numero 1 e 2…
Agora gostaria que alguem me ajuda se a fazer com q bloquei quando digitar letras…

Essa parte eu ja consegui:

//Pede o categoria do produto
String Produto = JOptionPane.showInputDialog(“PRODUTO 1-ROUPA 2-CALÇADOS”);

//ignora numeros maiores que 2
if (Integer.valueOf(Produto) > 2 )
JOptionPane.showMessageDialog(null,"Voce digitou um valor invalido: " + Produto);
Desde ja agradeço a ajuda!!!

[quote=@dler]Olá pessoal queria uma ajuda,comecei semestre passado Ciëncia da Computaçäo e gostaria de aprender Java estou pesquisando e estudando pela net achei varios topicos interessantes nesse forum.
Agora gostaria de contar com a ajuda de vcs tranquei em uma parte do meu programa onde gostaria de ler apenas numeros,uma parte ate ja consegui, que é fazer ele aceitar apenas o numero 1 e 2…
Agora gostaria que alguem me ajuda se a fazer com q bloquei quando digitar letras…

Essa parte eu ja consegui:

//Pede o categoria do produto
String Produto = JOptionPane.showInputDialog("PRODUTO 1-ROUPA 2-CALÇADOS");

//ignora numeros maiores que 2
if (Integer.valueOf(Produto) > 2 )
JOptionPane.showMessageDialog(null,"Voce digitou um valor invalido: " + Produto);
Desde ja agradeço a ajuda!!![/quote]

oi

utilize expressão regular para as validações

de uma olhada neste tópico

abs

André Fonseca com certeza usar Regex seria a melhor opção, mas o nosso amigo quer fazer um teste simples acho que iria complicar mais do que ajudar.

vou tentar simplificar um pouco.

o metodo parseInt lança uma exceção nao verificada “NumberFormatException” onde quero chegar com isso?

sempre que se tenta fazer parse de algo que nao seja um numero valido é lançada uma exceção.

vou deixar claro que essa nao é a melhor maneira pra fazer isso, mas ninguem morrerá por isso. vamos la:

[code]
import javax.swing.JOptionPane;

public class Test
{
public static void main(String[] args) throws Exception {
String numero = JOptionPane.showInputDialog(“digite um numero:”);
int n = 0;

	try 
	{
		n = Integer.parseInt(numero);//se nao for um numero lança exceção
		// faça o que quiser com 'n'
	}catch(NumberFormatException nfe) 
	{
		JOptionPane.showMessageDialog(null, "numero invalido");
	}
}

}[/code]

não é a melhor forma mais é 100% confiavel

        int n = 0;
        String test;
       
     do{
      Quantidade = JOptionPane.showInputDialog(null,"Digite a quantidade do Produto");//,JOptionPane.PLAIN_MESSAGE);
       try
     {  n = Integer.parseInt(Quantidade);
       test = "0";
     }catch(NumberFormatException nfe)   
     {  
        test= "1"; JOptionPane.showMessageDialog(null, "numero inválido");
     }
     }while(test.equals("1")||Integer.parseInt(Quantidade)<=0);

[quote=a.gomes]André Fonseca com certeza usar Regex seria a melhor opção, mas o nosso amigo quer fazer um teste simples acho que iria complicar mais do que ajudar.

vou tentar simplificar um pouco.

o metodo parseInt lança uma exceção nao verificada “NumberFormatException” onde quero chegar com isso?

sempre que se tenta fazer parse de algo que nao seja um numero valido é lançada uma exceção.

vou deixar claro que essa nao é a melhor maneira pra fazer isso, mas ninguem morrerá por isso. vamos la:

[code]
import javax.swing.JOptionPane;

public class Test
{
public static void main(String[] args) throws Exception {
String numero = JOptionPane.showInputDialog(“digite um numero:”);
int n = 0;

	try 
	{
		n = Integer.parseInt(numero);//se nao for um numero lança exceção
		// faça o que quiser com 'n'
	}catch(NumberFormatException nfe) 
	{
		JOptionPane.showMessageDialog(null, "numero invalido");
	}
}

}[/code][/quote]

Ou seja se não sabe expressões regulares mete gambi que resolve…

 private boolean isNumber(String str) {
          Pattern p = Pattern.compile("[0-9]+");
         Matcher m = p.matcher(str);
    return m.find();    
}

Não sei se funfa mesmo… não testei aqui… mas creio que ta certo…
agora essa de converter em numero pra ver se ocorre exceção de parse é uma grande gambiarra…

1 curtida

Não é gambiarra ou “recurso técnico alternativo” não, pois:
a) A expressão regular que faz a mesma coisa é mais lenta que simplesmente você capturar uma ParseException;
b) Isso é parecido com o que você faria em várias outras linguagens.

como sera q a api faz para verificar se ocorreu um parse exception ao vc tentar converter uma String em numero?
nunca olhei a fundo… porem tenho ctza que utiliza um recurso parecido com “ER” se não utilizar “ER” ao menos ela faz um algoritimo pra esta validação… ou seja em termos de velocidade é a mesma coisa… pois isto não é uma exeção de runtime e sim uma exceção feita atravez de validação… se fosse uma exceção de runtime como uma divisão por zero por exemplo a vm pode capturar uma interupção de nivel baixo e lançar a exceção dai sim seria bem mais rapido…

Exceções devem ser usadas pra tratar erros e não fazer validações…