How to check if a String is numeric in Java?
The Problem
I don’t know how to check if a String is numeric in Java.
The Solution
In Java, there are several ways to check whether a String is numeric, including the following common approaches:
- Using the
Integer.parseInt()orDouble.parseDouble()methods - Using regular expressions
- Using the
NumberUtils.isCreatable()method from theApache Commons Langlibrary
Using Integer.parseInt() or Double.parseDouble()
You can use Integer.parseInt() to check whether a string is numeric by attempting to parse it. If the string is not numeric, a NumberFormatException will be thrown.
public class Main {
public static void main(String[] args) {
String numericString = "123";
String nonNumericString = "123a";
System.out.println(isNumeric(numericString)); // 123 = true
System.out.println(isNumeric(nonNumericString)); // 123a = false
}
public static boolean isNumeric(String str) {
try {
Integer.parseInt(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
}
In this example, the isNumeric() method attempts to parse the string using Integer.parseInt(). If the parsing fails, it returns false.
Using Regular Expressions
You can use regular expressions to check whether a string is numeric. This method allows for more flexibility in defining what counts as a numeric value.
public class Main {
public static void main(String[] args) {
String numericString = "123.45";
String nonNumericString = "123a";
System.out.println(isNumeric(numericString)); // true
System.out.println(isNumeric(nonNumericString)); // false
}
public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?");
}
}
In this example, the regular expression -?\d+(\\.\d+)? checks whether the string is a valid number, optionally allowing for a negative sign and a decimal point.
Using Apache Commons Lang Library
The Apache Commons Lang library provides a utility method NumberUtils.isCreatable() that can be used to check whether a string is numeric.
To use this method, include the following dependency in your project:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Then use it as follows:
import org.apache.commons.lang3.math.NumberUtils;
public class Main {
public static void main(String[] args) {
String numericString = "123.45";
String nonNumericString = "123a";
System.out.println(NumberUtils.isCreatable(numericString)); // true
System.out.println(NumberUtils.isCreatable(nonNumericString)); // false
}
}
The NumberUtils.isCreatable() method can handle integers, floating-point numbers, and even numbers in scientific notation.
Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.