Извлечение цифр из строки в Java без дополнительных библиотек

Пройдите тест, узнайте какой профессии подходите

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

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

Чтобы извлечь числа из строки, используйте метод String replaceAll() с регулярным выражением \\D+, которое отсекает ненужные символы:

Java
Скопировать код
String digits = "a1b2c3".replaceAll("\\D+", "");
System.out.println(digits); // 123 – теперь здесь только числа!

Если производительность критична, применение скомпилированных шаблонов будет более эффективным, поскольку они работают значительно быстрее:

Java
Скопировать код
Pattern digitPattern = Pattern.compile("\\D+");
String digits = digitPattern.matcher("a1b2c3").replaceAll("");
System.out.println(digits); // 123 – понятно и кратко
Кинга Идем в IT: пошаговый план для смены профессии

Простое решение без использования регулярных выражений

Если применение регулярных выражений показалось сложным, можно проитерировать строку с StringBuilder:

Java
Скопировать код
public String extractDigits(String input) {
    StringBuilder sb = new StringBuilder();
    for (char c : input.toCharArray()) {
        if (Character.isDigit(c)) {
            sb.append(c);
        }
    }
    return sb.toString();
}

Однако, стоит учесть, что этот метод распознаёт только ASCII цифры и игнорирует цифры в кодировке Unicode.

Усовершенствование решений с помощью библиотек

Для упрощения кода и улучшения его читаемости можно использовать CharMatcher из библиотеки Guava:

Java
Скопировать код
String digits = CharMatcher.inRange('0', '9').retainFrom("a1b2c3");
System.out.println(digits); // 123 – словно по волшебству

Но не забывайте, что внешние библиотеки могут нагружать ваш проект.

Завершение

Регулярные выражения широко используются в сообществе разработчиков благодаря их эффективности и точности в такого рода задачах.

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

Попробуйте представить себе сад, где вместо плодов на деревьях цифры:

Markdown
Скопировать код
🌼🌺A🍎1🌻B🍋2💐3🌷C🍇D4🌹E🍉5F🌸G🌼

Применение replaceAll схоже с использованием магнита, который притягивает цифры:

Java
Скопировать код
string.replaceAll("[^\\d]", "");

А в итоге у вас в корзине остаются только числа:

Markdown
Скопировать код
Корзина: [1, 2, 3, 4, 5] – лишь числа, но сколько можно из них узнать!

Остерегайтесь локализации и форматов

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

Сравнение производительности

Для истинных завсегдатаев производительности можно провести сравнение CharSequence и потоков в Java 8+ с фильтром, чтобы определить, какой метод работает быстрее в различных условиях.

Подготовка к будущему

Следите за обновлениями Java, в частности за сопоставлением шаблонов в Java 17 и изменениями в работе со строками, чтобы ваш код был максимально актуальным и поддерживаемым.

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

  1. String (Java Platform SE 7) — Основные принципы работы со строками в Java.
  2. Pattern (Java Platform SE 8) — Обзор регулярных выражений в Java.
  3. Matcher (Java Platform SE 8) — Инструкции по работе с матчером для регулярных выражений.
  4. Regular expressions in Java – Tutorial — Руководство по практическому применению регулярных выражений.
  5. Extract digits from a string in Java – Stack Overflow — Многообразные решения для извлечения чисел из строки.
  6. StringUtils (Apache Commons Lang 3.14.0 API) — Обзор функционала StringUtils.
  7. Trail: Learning the Java Language (The Java™ Tutorials) — Учебные материалы по Java для любого уровня подготовки.