Определение целого числа в String массиве на Java

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для проверки строки на соответствие целому числу в Java легко воспользоваться блоком try-catch в сочетании с методом Integer.parseInt(). Если строка успешно преобразуется в целое число, вернётся true. В случае NumberFormatException результат будет false.

Java
Скопировать код
boolean isInteger(String str) {
    try {
        Integer.parseInt(str);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

Пример использования:

Java
Скопировать код
boolean isInt = isInteger("123"); // Вернёт true

Повышение эффективности

Использование обработки исключений удобно, но она может быть не самой эффективной из-за дополнительных затрат при обработке исключений.

Как улучшить эффективность кода?

Для этого подойдут регулярные выражения:

Java
Скопировать код
boolean isIntegerRegex(String str) {
    return str.matches("-?\\d+");
}

Если вам доступна библиотека Apache Commons Lang, можно использовать метод StringUtils.isNumeric, которым не предусмотрена обработка отрицательных значений:

Java
Скопировать код
boolean isInt = StringUtils.isNumeric("123"); // Вернёт true

Выбор метода зависит от специфики вашего проекта и наличия нужных библиотек.

Обработка больших чисел

С очень большими числами Java может столкнуться с проблемами. Если значение превышает Integer.MAX_VALUE или Integer.MIN_VALUE, метод Integer.parseInt() выбрасывает исключение, а регулярные выражения не учтут эту особенность.

Для решения этой проблемы можно использовать BigInteger:

Java
Скопировать код
boolean isIntegerSafe(String str) {
    try {
        new BigInteger(str);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

Помните, что:

  • BigInteger способен обрабатывать строки любой длины, но может быть избыточен.
  • Предварительное ограничение размера числа путём проверки длины может экономить ресурсы.
  • Метод Ints.tryParse() из библиотеки Google Guava представляет собой изящную альтернативу Integer.parseInt(), исключающую использование исключений.

Высокая точность с регулярными выражениями

Если требуется большая точность, регулярные выражения — это лучший выбор. Они позволяют исключить числа с ведущими нулями или настроить формат числа.

Пример регулярного выражения для целых чисел без ведущих нулей:

Java
Скопировать код
boolean isPreciseIntegerRegex(String str) {
    return str.matches("-?(0|[1-9]\\d*)");
}

Визуализация

Сравнение строки на соответствие целому числу напоминает фильтрацию через воронку:

Markdown
Скопировать код
🔤 Входная строка ===> [Это целое число?] ===> 🛑 или 🔢
  • Если проверка успешна, то строка является целым числом (🔢).
  • Если проверка не прошла, то входные данные не удовлетворяют условию (🛑).

Примеры:

Markdown
Скопировать код
Вход: "123"     =>   Выход: 🔢 (Прошло!)
Вход: "Привет"  =>   Выход: 🛑 (Не подходит!)

Обработка крайних случаев и лучшие практики

Обработка крайних случаев: Unicode-цифры также требуют учёта. В данном случае вам нужно проверить каждый символ, используя Character.isDigit().

Java
Скопировать код
boolean isIntegerUnicode(String str) {
    for (char ch : str.toCharArray()) {
        if (!Character.isDigit(ch)) {
            return false;
        }
    }
    return !str.isEmpty();
}

Лучшие практики: Валидация входных данных

Всегда очищайте и проверяйте входные данные. Это помогает предотвратить потенциальные атаки и защищает ваш код.

Подводные камни: Обработка больших строк

Предусмотрите случай, когда в функцию передаются большие строки. Это может существенно снизить производительность.

Управление сценариями: Сортировка строк как целых чисел

Если требуется отсортировать список строк, интерпретируемых как целые числа, следует предварительно выполнить их валидацию. Иначе может возникнуть неправильный порядок сортировки. Преобразуйте строки или используйте специальный компаратор:

Java
Скопировать код
Collections.sort(stringList, (a, b) -> {
    if (isInteger(a) && isInteger(b)) {
        return Integer.compare(Integer.parseInt(a), Integer.parseInt(b));
    }
    return a.compareTo(b);
});

Полезные материалы

  1. Determine if a String is an Integer in Java – Stack Overflow — подробная информация по вопросу проверки строк на соответствие целым числам от сообщества Stack Overflow.
  2. NumberUtils (Apache Commons Lang 3.14.0 API) — изящный способ проверки строк на числовые значения от Apache Commons Lang.
  3. Integer (Java Platform SE 7 ) — официальная документация Oracle по методу Integer.parseInt().
  4. Java – String matches() Method — обзор метода matches() класса String в Java.
  5. GitHub: Google Guava Libraries – Ints.tryParse() Method — посмотрите метод Ints.tryParse() из библиотеки Google Guava для безопасного преобразования строк в числа.
  6. Java Source Code for Handling NumberFormatException — полезное руководство по работе с исключениями NumberFormatException в Java.