Comparar inteiros com strings

6 respostas
R

Ola pessoal,

estou com uma duvida muito básica, quero pegar o valor que vem da tela, tipo (txtcampo.getText) e verificar se ele é uma string ou um inteiro. Fiz desta forma, mas acho que 'viajei’um pouco.

int valor = Integer.parseInt(txtCache.getText());
				if(valor != valor){
					JOptionPane.showMessageDialog(null, " Informe um numero Inteiro, ex: '5000'","Atenção"
							,JOptionPane.WARNING_MESSAGE); 
					txtCache.setFocus();

6 Respostas

P

Sim…desse jeito que passou fica confuso pq caracteres alfanumérico são tratatos como string, então vc não ia saber diferenciar 1, 2, A, B, 1B2, e etc…

Eu sugiro vc fazer:

int valor;
try {
valor = Integer.parseInt(txtCache.getText());
} catch (Exception ex){
JOptionPane.showMessageDialog(null, " Informe um numero Inteiro, ex: '5000'","Atenção"
							,JOptionPane.WARNING_MESSAGE); 
					txtCache.setFocus();
}
marcosharbs

bem o txtCache.getText(); vai te retornar uma String
ai se vc quiser saber se ele é um inteiro vc faz um cast

try{
Integer.parseInt(txtCache.getText());
}catch(Exception e){
   //Aqui vc trata a exceção
}

seria isso mais o menos que vc quer?

Gobain
Bom, o q vc fez, se nao der um erro por vc tentar dar parse em algo q nao e um inteiro (ex.: abc) vai sempre ser considerado verdadeiro e nunca exibira o JOptionPane, pq vc compara a variavel valor com ela mesma. Vc pode tentar fazer algo como:
int valor = 0;
try {
    valor = Integer.parseInt(txtCache.getText());
} catch(Exception ep) {
    System.out.println("nao e inteiro");
}

System.out.println("valor do campo de texto: " + valor);

Assim vc pode tratar caso ocorra algum erro, ou pode ter alguma ideia melhor tb pra resolver :D

H

Se for para fazer um Workaround (uma Gambiarra) te aconselho a fazer isto então.
Da maneira que o padcoe e a melhor forma, mas o correto seria você utilizar Regex.

http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html

Exemplo:
// Somente Numero
Pattern p = Pattern.compile("*\d");

// Valida o seu Texto
Matcher m = p.matcher("seuTexto");

// Verifica se passa no teste
boolean b = m.matches();

Mas acredito que de para juntar isso junto com o Swing, em tempo de execução
ou seja, o usuário vá digitando e ele vai validando em tempo real.

Gobain
hugov:
Se for para fazer um Workaround (uma Gambiarra) te aconselho a fazer isto então. Da maneira que o padcoe e a melhor forma, mas o correto seria você utilizar Regex.

http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html

Exemplo:
// Somente Numero
Pattern p = Pattern.compile("*\d");

// Valida o seu Texto
Matcher m = p.matcher("seuTexto");

// Verifica se passa no teste
boolean b = m.matches();

Mas acredito que de para juntar isso junto com o Swing, em tempo de execução
ou seja, o usuário vá digitando e ele vai validando em tempo real.

Verdade, com regex fica bem bacana... nem lembrei dessa possibilidade :?

R

:slight_smile: vlw pessoal pelas formas diferentes de se chegar ao mesmo resultado, gostei do regex mas optei pela forma ‘tradicioanal’. ficou assim:

int valor= 0;
				try{
					valor = Integer.parseInt(txtCache.getText());
				}catch (Exception e) {
						JOptionPane.showMessageDialog(null, " Informe um numero Inteiro, ex: '5000'","Atenção"
								,JOptionPane.WARNING_MESSAGE); 
						txtCache.setText("");
						txtCache.setFocus();
					}


				}
			}

		);
Criado 29 de outubro de 2008
Ultima resposta 29 de out. de 2008
Respostas 6
Participantes 5