Проверка числовой строки в 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+).