Comparar inteiros com strings

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();

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();
}

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?

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:

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

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

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:

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

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.

[quote=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:

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

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

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

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


				}
			}

		);