I normally use the following idiom to check if a String can be converted to an integer.
public boolean isInteger( String input ) {
try {
Integer.
If you are using the Android API you can use:
TextUtils.isDigitsOnly(str);
How about:
return Pattern.matches("-?\\d+", input);
You may try apache utils
NumberUtils.isCreatable(myText)
See the javadoc here
You just check NumberFormatException:-
String value="123";
try
{
int s=Integer.parseInt(any_int_val);
// do something when integer values comes
}
catch(NumberFormatException nfe)
{
// do something when string values comes
}
You probably need to take the use case in account too:
If most of the time you expect numbers to be valid, then catching the exception is only causing a performance overhead when attempting to convert invalid numbers. Whereas calling some isInteger()
method and then convert using Integer.parseInt()
will always cause a performance overhead for valid numbers - the strings are parsed twice, once by the check and once by the conversion.
This is shorter, but shorter isn't necessarily better (and it won't catch integer values which are out of range, as pointed out in danatel's comment):
input.matches("^-?\\d+$");
Personally, since the implementation is squirrelled away in a helper method and correctness trumps length, I would just go with something like what you have (minus catching the base Exception
class rather than NumberFormatException
).