Home > DeveloperSection > Forums > How to check if a String is a numeric type in Java
Jessica James
Jessica James

Total Post:16

Points:114
Posted on    July-24-2015 7:11 AM

 Java Java  String 
Ratings:


 1 Reply(s)
 438  View(s)
Rate this:
How would you check if a String was a number before parsing it?


Mayank Tripathi
Mayank Tripathi

Total Post:397

Points:3117
Posted on    July-24-2015 8:18 AM

This is generally done with a simple user-defined function (i.e. Roll-your-own "isNumeric" function).

Something like:
public static boolean isNumeric(String str)  
{  
  try  
  {  
    double d = Double.parseDouble(str);  
  }  
  catch(NumberFormatException nfe)  
  {  
    return false;  
  }  
  return true;  
}
However, if you're calling this function a lot, and you expect many of the checks to fail due to not being a number then performance of this mechanism will not be great, since you're relying upon exceptions being thrown for each failure, which is a fairly expensive operation.

An alternative approach may be to use a regular expression to check for validity of being a number:

public static boolean isNumeric(String str)
{
  return str.matches("-?\\d+(\\.\\d+)?");  //match a number with optional '-' and decimal.
}
Be careful with the above RegEx mechanism, though, as it'll fail if your using non-latin (i.e. 0 to 9) digits. For example, arabic digits. This is because the "\d" part of the RegEx will only match [0-9] and effectively isn't internationally numerically aware. (Thanks to OregonGhost for pointing this out!)

Or even another alternative is to use Java's built-in java.text.NumberFormat object to see if, after parsing the string the parser position is at the end of the string. If it is, we can assume the entire string is numeric:

public static boolean isNumeric(String str)
{
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition pos = new ParsePosition(0);
  formatter.parse(str, pos);
  return str.length() == pos.getIndex();
}

Don't want to miss updates? Please click the below button!

Follow MindStick