Проверка числовой строки в Java — Integer.parseInt и регулярка

В этой программе мы научимся проверять, является ли строка числом.

Пример 1: проверка строки на число

public class Numeric {

    public static void main(String[] args) {

        String string = "12345.15";
        boolean numeric = true;

        try {
            Double num = Double.parseDouble(string);
        } catch (NumberFormatException e) {
            numeric = false;
        }

        if(numeric)
            System.out.println(string + " is a number");
        else
            System.out.println(string + " is not a number");
    }
}

Вывод:

12345.15 is a number

В программе выше у нас есть строка string, содержащая значение для проверки. Также есть логическая переменная numeric, в которой хранится итоговый результат — число это или нет.

Чтобы проверить, содержит ли строка только числа, мы в блоке try используем метод Double.parseDouble() для преобразования строки в Double.

Если он бросает ошибку (NumberFormatException), значит строка не является числом, и numeric устанавливается в false. Иначе — это число.

Совет

Если нужно проверять множество строк, такую логику стоит вынести в функцию. Но поскольку она основана на исключениях, это может быть довольно затратно по производительности.

Вместо этого можно использовать регулярные выражения, как показано ниже.


Пример 2: проверка строки на число с помощью регулярного выражения

public class Numeric {

    public static void main(String[] args) {

        String string = "-1234.15";
        boolean numeric = true;

        numeric = string.matches("-?\\d+(\\.\\d+)?");

        if(numeric)
            System.out.println(string + " is a number");
        else
            System.out.println(string + " is not a number");
    }
}

Вывод:

-1234.15 is a number

В программе выше вместо блока try-catch мы используем регулярное выражение, чтобы проверить, является ли строка числом. Это делается с помощью метода matches() класса String.

В методе matches():

  • -? разрешает ноль или более - для отрицательных чисел в строке;

  • \\d+ требует, чтобы строка содержала хотя бы 1 или больше цифр (\\d);

  • (\\.\\d+)? разрешает ноль или более вхождений шаблона (\\.\\d+), где:

    • \\. проверяет, содержит ли строка . (десятичную точку) или нет;

    • если да, то за ней должна следовать хотя бы одна цифра (\\d+).