
В Java строки часто поступают из пользовательского ввода, файлов или сетевых источников, и перед использованием их как чисел требуется точная проверка. Попытка напрямую преобразовать некорректную строку в число приведет к NumberFormatException, поэтому важно заранее определить, является ли строка допустимым числом.
Для целых чисел обычно используется Integer.parseInt или Long.parseLong с обработкой исключений. Для чисел с плавающей точкой применяются Float.parseFloat и Double.parseDouble. Альтернативой является проверка через регулярные выражения, что позволяет учитывать отрицательные значения, десятичные точки и экспоненциальные обозначения.
При посимвольной проверке строк можно использовать Character.isDigit, что удобно для создания собственных методов валидации без выбрасывания исключений. Такой подход позволяет точно контролировать допустимые форматы, включая пробелы, знаки и разделители.
Важно различать целые и дробные числа, а также учитывать отрицательные значения. Стандартные методы Java корректно работают с положительными и отрицательными числами, но при использовании регулярных выражений или собственной логики проверки необходимо явно прописывать обработку знака и формата числа.
Использование Integer.parseInt и обработка исключений

Метод Integer.parseInt(String s) преобразует строку в целое число. Если строка не соответствует формату целого числа, метод выбрасывает NumberFormatException. Для безопасной проверки необходимо оборачивать вызов в блок try-catch.
Пример базовой проверки:
try {
int number = Integer.parseInt(inputString);
// Строка успешно преобразована в число
} catch (NumberFormatException e) {
// Строка не является корректным целым числом
}
Рекомендации по использованию:
- Удаляйте пробелы с помощью trim() перед преобразованием.
- Для чисел вне диапазона Integer.MIN_VALUE…Integer.MAX_VALUE метод также вызовет исключение.
- Если требуется работа с длинными числами, используйте Long.parseLong.
Для удобства можно создать вспомогательный метод, который возвращает true, если строка является числом, и false при ошибке:
public static boolean isInteger(String s) {
try {
Integer.parseInt(s.trim());
return true;
} catch (NumberFormatException e) {
return false;
}
}
Такой подход минимизирует риск возникновения исключений в основной логике программы и обеспечивает точную проверку формата целого числа.
Проверка числа с плавающей точкой через Double.parseDouble

Метод Double.parseDouble(String s) преобразует строку в число с плавающей точкой типа double. При некорректном формате строки метод выбрасывает NumberFormatException, поэтому для проверки нужно использовать блок try-catch.
Пример проверки строки:
try {
double value = Double.parseDouble(inputString.trim());
// Строка корректна и преобразована в число double
} catch (NumberFormatException e) {
// Строка не является числом с плавающей точкой
}
Особенности использования:
- Метод учитывает десятичную точку и научную запись, например «3.14» или «2.5e3».
- Знаки «+» и «-» перед числом допустимы.
- Пробелы в начале или конце строки нужно удалять через trim() для корректной проверки.
- Для чисел, выходящих за пределы Double.MIN_VALUE и Double.MAX_VALUE, будет выброшено исключение.
Для удобства можно создать метод, который возвращает true, если строка корректная:
public static boolean isDouble(String s) {
try {
Double.parseDouble(s.trim());
return true;
} catch (NumberFormatException e) {
return false;
}
}
Этот подход позволяет безопасно проверять строки на числа с плавающей точкой без нарушения выполнения программы.
Применение регулярных выражений для числовых строк

Регулярные выражения позволяют проверять строки на соответствие числовым форматам без обработки исключений. Для целых чисел можно использовать паттерн «-?\\d+», который учитывает опциональный знак «-» и последовательность цифр.
Пример проверки целого числа через Pattern и Matcher:
String regex = "-?\\d+";
boolean isInteger = inputString.matches(regex);
Для чисел с плавающей точкой подходит паттерн «-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?». Он учитывает:
- Опциональный знак «+» или «-«.
- Десятичную точку с цифрами после нее.
- Научную запись с «e» или «E» и возможным знаком показателя степени.
Пример проверки double через регулярное выражение:
String regexDouble = "-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?";
boolean isDouble = inputString.matches(regexDouble);
Регулярные выражения удобны для быстрой валидации и фильтрации входных данных без риска выброса исключений, а также позволяют расширять проверки под конкретные форматы чисел.
Метод Character.isDigit для посимвольной проверки

Метод Character.isDigit(char ch) позволяет проверить каждый символ строки на принадлежность к цифрам. Такой подход полезен, когда нужно избежать выброса исключений и контролировать формат числа самостоятельно.
Пример проверки строки на целое число:
public static boolean isNumeric(String s) {
if (s == null || s.isEmpty()) return false;
s = s.trim();
int start = 0;
if (s.charAt(0) == '-' || s.charAt(0) == '+') start = 1;
for (int i = start; i < s.length(); i++) {
if (!Character.isDigit(s.charAt(i))) return false;
}
return start < s.length();
}
Особенности метода:
- Позволяет вручную обрабатывать знаки «+» и «-«.
- Можно адаптировать для проверки дробных чисел, добавив проверку символа десятичной точки.
- Полезен для небольших строк и случаев, когда важна точная посимвольная валидация.
Метод обеспечивает контроль над форматом, минимизирует зависимости от исключений и позволяет создавать кастомные проверки числовых строк.
Различие между целыми числами и дробными в строках
В Java строки, представляющие числа, могут содержать целые значения или дробные. Правильная идентификация типа числа важна для корректного преобразования и дальнейших вычислений.
Основные отличия:
| Признак | Целое число | Дробное число |
|---|---|---|
