Como saber se uma String pode ser um int

Ola pessoal estou com uma dúvida bem besta, mas importante
tenho uma String a que é lida e como eu faço para saber se é um int
tipo
se (a == int){
mostrar( é um número);
}senao {
mostrar( é uma palavra);

simples não?, mas eu não sei fazer :smiley:

tenta fazer um parse pra int

[code]try{
Integer.parseInt(a);
}catch(NumberFormatException e){

}[/code]

també dá pra fazer usando regex

[code]public static void main(String[] args) {
String s = “A”;
try{
Integer.parseInt(s);
System.out.println(“é numero”);
}catch(Exception e){
System.out.println(“NÃO é numero”);
}

}[/code]
1 curtida

eu sabia que não era tão difícil.
Obrigado pessoal: Marlon Meneses e mateus.cordeiro

agora é só usar essa lógica em uma coisa um pouquinho mas complicada
valeu gente :smiley:

NÃO FAÇA ISSO

Evite REGEX o quanto puder… lembre-se que você e outras pessoas precisarão dar manutenção neste sistema depois!!! Use padrões!!!

NÃO FAÇA ISSO

Evite REGEX o quanto puder… lembre-se que você e outras pessoas precisarão dar manutenção neste sistema depois!!! Use padrões!!![/quote]

++

NÃO FAÇA ISSO

Evite REGEX o quanto puder… lembre-se que você e outras pessoas precisarão dar manutenção neste sistema depois!!! Use padrões!!![/quote]
O que usar regex tem a ver? O único problema seria se a pessoa que for dar manutenção não souber expressões regulares.

NÃO FAÇA ISSO

Evite REGEX o quanto puder… lembre-se que você e outras pessoas precisarão dar manutenção neste sistema depois!!! Use padrões!!![/quote]

++[/quote]

Não entendi… pq ??? regex não é padrão ???

Eu acho muito mais elegante algo como:

public static boolean isNumeroRegexp(String texto) {
	Pattern pat = Pattern.compile("[0-9]+");      
	Matcher mat = pat.matcher(texto);
	return mat.matches();
}
	

do que um try/catch…

public static boolean isNumeroTry(String texto) {
	try {
		Integer.parseInt(texto);
		return true;
	} catch (NumberFormatException nfex) {
		return false;
	}
}

Será que estou errado?

[quote=digaoneves]O que usar regex tem a ver? O único problema seria se a pessoa que for dar manutenção não souber expressões regulares.[/quote]+1

É nessa hora que a boa prática de Code Review ou Pair Programming mata a pau. O conhecimento é disseminado e quem não sabia como funciona um regex, passa a saber. [=

Claro que não. Eu concordo com você.

“A simplicidade é o último grau de sofisticação.” Leonardo da Vinci.

Pra que complicar se é possível facilitar? Usar regex só se for inevitável!!! Neste caso, é muito mais claro, padronizado, elegante e profissional validar através de “NumberFormatException”… afinal de contas, não por isso que esta exceção existe?

Quem gosta de complicação tem que ir programar é em assembler! Tem muito mercado, aproveitem!

[quote=robson.crulz]“A simplicidade é o último grau de sofisticação.” Leonardo da Vinci.

Pra que complicar se é possível facilitar? Usar regex só se for inevitável!!! Neste caso, é muito mais claro, padronizado, elegante e profissional validar através de “NumberFormatException”.[/quote]Você acha mais elegante estourar uma exception? ter que colocar um try/catch no seu código apenas para saber se é um número ou não? Bem se essa é sua opinião eu respeito, mas é totalmente diferente da minha. [=

“hahah vá à merda meu”

cada com seu tipo de padrão…

if ( suaString.matches ("[0-9]+") ) { // converte para inteiro }

Sou contra lançar exceções sem necessidade. Deixar que a JVM estoure uma exceção para sabermos se é ou não possível a conversão se temos meio de evitarmos exceções. Há expressões regulares complexas e elas, sim, são “lentas”. Mas trata-se de algo elegante e simples de usar, muito mais adequado que um tratamento de exceção.

Opinião minha.

Puxa tudo isso só para saber se o cara digitou um numero?

Tudo isso o que? o try/catch? ou a regex?

se eu quizer retornar true para todos que se enquadrem no tipo numeral: BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short

qual seria a forma mais “elegante” de fazer ?

como ficaria um método bem feito ?

todos esses tipos são classes derivadas da classe abstrata java.lang.Number,

Tudo isso o que? o try/catch? ou a regex?[/quote]

É que é assim:
tenho uma consulta no banco e quero que um campo só possa varrer o banco atras de uma informação, até agora tudo bem com String e como meu banco não tem Date, não me preocupei com ele, mas tem números.

por isso a questão,
se( digitado == int) {
varrer o banco com as colunas que são números
}

tentei usar o try, péssima ideia;
vamos tentar o regex

[quote=douglaskd]se eu quizer retornar true para todos que se enquadrem no tipo numeral: BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short

qual seria a forma mais “elegante” de fazer ?

como ficaria um método bem feito ?

todos esses tipos são classes derivadas da classe abstrata java.lang.Number, [/quote]

As soluções apresentadas são para verificar se uma String possui caracteres numéricos.

Se quer saber se um objeto é um Number, use instanceof.