Определение целого числа в String массиве на Java
Быстрый ответ
Для проверки строки на соответствие целому числу в Java легко воспользоваться блоком try-catch
в сочетании с методом Integer.parseInt()
. Если строка успешно преобразуется в целое число, вернётся true
. В случае NumberFormatException
результат будет false
.
boolean isInteger(String str) {
try {
Integer.parseInt(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
Пример использования:
boolean isInt = isInteger("123"); // Вернёт true
Повышение эффективности
Использование обработки исключений удобно, но она может быть не самой эффективной из-за дополнительных затрат при обработке исключений.
Как улучшить эффективность кода?
Для этого подойдут регулярные выражения:
boolean isIntegerRegex(String str) {
return str.matches("-?\\d+");
}
Если вам доступна библиотека Apache Commons Lang, можно использовать метод StringUtils.isNumeric
, которым не предусмотрена обработка отрицательных значений:
boolean isInt = StringUtils.isNumeric("123"); // Вернёт true
Выбор метода зависит от специфики вашего проекта и наличия нужных библиотек.
Обработка больших чисел
С очень большими числами Java может столкнуться с проблемами. Если значение превышает Integer.MAX_VALUE
или Integer.MIN_VALUE
, метод Integer.parseInt()
выбрасывает исключение, а регулярные выражения не учтут эту особенность.
Для решения этой проблемы можно использовать BigInteger
:
boolean isIntegerSafe(String str) {
try {
new BigInteger(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
Помните, что:
BigInteger
способен обрабатывать строки любой длины, но может быть избыточен.- Предварительное ограничение размера числа путём проверки длины может экономить ресурсы.
- Метод
Ints.tryParse()
из библиотеки Google Guava представляет собой изящную альтернативуInteger.parseInt()
, исключающую использование исключений.
Высокая точность с регулярными выражениями
Если требуется большая точность, регулярные выражения — это лучший выбор. Они позволяют исключить числа с ведущими нулями или настроить формат числа.
Пример регулярного выражения для целых чисел без ведущих нулей:
boolean isPreciseIntegerRegex(String str) {
return str.matches("-?(0|[1-9]\\d*)");
}
Визуализация
Сравнение строки на соответствие целому числу напоминает фильтрацию через воронку:
🔤 Входная строка ===> [Это целое число?] ===> 🛑 или 🔢
- Если проверка успешна, то строка является целым числом (
🔢
). - Если проверка не прошла, то входные данные не удовлетворяют условию (
🛑
).
Примеры:
Вход: "123" => Выход: 🔢 (Прошло!)
Вход: "Привет" => Выход: 🛑 (Не подходит!)
Обработка крайних случаев и лучшие практики
Обработка крайних случаев: Unicode-цифры также требуют учёта. В данном случае вам нужно проверить каждый символ, используя Character.isDigit()
.
boolean isIntegerUnicode(String str) {
for (char ch : str.toCharArray()) {
if (!Character.isDigit(ch)) {
return false;
}
}
return !str.isEmpty();
}
Лучшие практики: Валидация входных данных
Всегда очищайте и проверяйте входные данные. Это помогает предотвратить потенциальные атаки и защищает ваш код.
Подводные камни: Обработка больших строк
Предусмотрите случай, когда в функцию передаются большие строки. Это может существенно снизить производительность.
Управление сценариями: Сортировка строк как целых чисел
Если требуется отсортировать список строк, интерпретируемых как целые числа, следует предварительно выполнить их валидацию. Иначе может возникнуть неправильный порядок сортировки. Преобразуйте строки или используйте специальный компаратор:
Collections.sort(stringList, (a, b) -> {
if (isInteger(a) && isInteger(b)) {
return Integer.compare(Integer.parseInt(a), Integer.parseInt(b));
}
return a.compareTo(b);
});
Полезные материалы
- Determine if a String is an Integer in Java – Stack Overflow — подробная информация по вопросу проверки строк на соответствие целым числам от сообщества Stack Overflow.
- NumberUtils (Apache Commons Lang 3.14.0 API) — изящный способ проверки строк на числовые значения от Apache Commons Lang.
- Integer (Java Platform SE 7 ) — официальная документация Oracle по методу
Integer.parseInt()
. - Java – String matches() Method — обзор метода
matches()
класса String в Java. - GitHub: Google Guava Libraries – Ints.tryParse() Method — посмотрите метод
Ints.tryParse()
из библиотеки Google Guava для безопасного преобразования строк в числа. - Java Source Code for Handling NumberFormatException — полезное руководство по работе с исключениями NumberFormatException в Java.