Java library to check whether a String contains a number *without* exceptions

I’m looking for a method that returns a boolean if the String it is passed is a valid number (e.g. “123.55e-9”, “-333,556”). I don’t want to just do:

public boolean isANumber(String s) {
    try { 
        BigDecimal a = new BigDecimal(s); 
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

Clearly, the function should use a state machine (DFA) to parse the string to make sure invalid examples don’t fool it (e.g. “-21,22.22.2”, “33-2”). Do you know if any such library exists? I don’t really want to write it myself as it’s such an obvious problem that I’m sure I’d be re-inventing the wheel.

Thanks,

Nick

Answer

I would avoid re-inventing this method and go with Apache Commons. If your using Spring, Struts or many other commonly used java libraries, they often have Apache commons included. You will want the commons-lang.jar file. Here is the method in NumberUtils you would want:

isNumber[1]

public static boolean isNumber(java.lang.String str)
Checks whether the String a valid Java number.

Valid numbers include hexadecimal marked with the 0x qualifier, scientific notation and numbers marked with a type qualifier (e.g. 123L).

Null and empty String will return false.

Parameters:
str - the String to check
Returns:
true if the string is a correctly formatted number

Leave a Reply

Your email address will not be published. Required fields are marked *