String para filtrar letras aceitar apenas numeros

6 respostas
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!!!

6 Respostas

Andre_Fonseca

@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!!!</blockquote>

oi

utilize expressão regular para as validações

de uma olhada neste tópico

abs

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:
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");
		}
	}
}
J

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);
luistiagos
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:
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");
		}
	}
}

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

E

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.

luistiagos

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…

Criado 2 de fevereiro de 2009
Ultima resposta 8 de out. de 2009
Respostas 6
Participantes 6