How to check if a String is numeric in Java?

Abdul D.
jump to solution

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() or Double.parseDouble() methods
  • Using regular expressions
  • Using the NumberUtils.isCreatable() method from the Apache Commons Lang library

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.

Sentry