Как проверить, что строка — число
Короткий ответ
Самый надёжный способ — попробовать разобрать строку и перехватить NumberFormatException:
boolean isInteger(String text) {
try {
Integer.parseInt(text);
return true;
} catch (NumberFormatException e) {
return false;
}
}
void main() {
IO.println(isInteger("123"));
IO.println(isInteger("-7"));
IO.println(isInteger("12a"));
}Результат:
true
true
falseТолько цифры
Если нужны только цифры без знака (например, код из СМС), подойдёт регулярное выражение:
void main() {
IO.println("004512".matches("\\d+"));
IO.println("45.12".matches("\\d+"));
}Результат:
true
falseДробные числа
Для дробных чисел используйте Double.parseDouble() или выражение с необязательной дробной частью:
void main() {
String pattern = "-?\\d+(\\.\\d+)?";
IO.println("3.14".matches(pattern));
IO.println("-10".matches(pattern));
IO.println("3.".matches(pattern));
}Результат:
true
true
falseБез исключений и регулярок
Проверка через поток символов работает быстро и понятна с первого взгляда:
void main() {
String text = "2026";
boolean digits = !text.isEmpty() && text.chars().allMatch(Character::isDigit);
IO.println(digits);
}Результат:
trueЧастая ошибка
Строка из одних цифр может не поместиться в int. Регулярное выражение её пропустит, а parseInt() упадёт:
void main() {
String text = "99999999999";
IO.println(text.matches("\\d+"));
IO.println(Integer.parseInt(text));
}Результат:
true
Exception in thread "main" java.lang.NumberFormatException: For input string: "99999999999"Для больших значений используйте Long.parseLong() или new BigInteger(text).
Функции из этого ответа
- Integer.parseInt() — Превращает строку с целым числом в int.
- String.matches() — Проверяет, соответствует ли вся строка регулярному выражению.
- Character.isDigit() — Проверяет, является ли символ цифрой. Рядом — isLetter(), isWhitespace(), isUpperCase().
- String.chars() — Возвращает поток кодов символов строки.