Извлечение цифр из строки в Java без дополнительных библиотек
Быстрый ответ
Чтобы извлечь числа из строки, используйте метод String
replaceAll()
с регулярным выражением \\D+
, которое отсекает ненужные символы:
String digits = "a1b2c3".replaceAll("\\D+", "");
System.out.println(digits); // 123 – теперь здесь только числа!
Если производительность критична, применение скомпилированных шаблонов будет более эффективным, поскольку они работают значительно быстрее:
Pattern digitPattern = Pattern.compile("\\D+");
String digits = digitPattern.matcher("a1b2c3").replaceAll("");
System.out.println(digits); // 123 – понятно и кратко
Простое решение без использования регулярных выражений
Если применение регулярных выражений показалось сложным, можно проитерировать строку с StringBuilder
:
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:
String digits = CharMatcher.inRange('0', '9').retainFrom("a1b2c3");
System.out.println(digits); // 123 – словно по волшебству
Но не забывайте, что внешние библиотеки могут нагружать ваш проект.
Завершение
Регулярные выражения широко используются в сообществе разработчиков благодаря их эффективности и точности в такого рода задачах.
Визуализация
Попробуйте представить себе сад, где вместо плодов на деревьях цифры:
🌼🌺A🍎1🌻B🍋2💐3🌷C🍇D4🌹E🍉5F🌸G🌼
Применение replaceAll
схоже с использованием магнита, который притягивает цифры:
string.replaceAll("[^\\d]", "");
А в итоге у вас в корзине остаются только числа:
Корзина: [1, 2, 3, 4, 5] – лишь числа, но сколько можно из них узнать!
Остерегайтесь локализации и форматов
Обращайте внимание на локализацию и форматы чисел, так как они могут усложнить процесс извлечения цифр. Для проверки ввода используйте валидацию и избегайте проблем применением обработки исключительных ситуаций.
Сравнение производительности
Для истинных завсегдатаев производительности можно провести сравнение CharSequence
и потоков в Java 8+ с фильтром, чтобы определить, какой метод работает быстрее в различных условиях.
Подготовка к будущему
Следите за обновлениями Java, в частности за сопоставлением шаблонов в Java 17 и изменениями в работе со строками, чтобы ваш код был максимально актуальным и поддерживаемым.
Полезные материалы
- String (Java Platform SE 7) — Основные принципы работы со строками в Java.
- Pattern (Java Platform SE 8) — Обзор регулярных выражений в Java.
- Matcher (Java Platform SE 8) — Инструкции по работе с матчером для регулярных выражений.
- Regular expressions in Java – Tutorial — Руководство по практическому применению регулярных выражений.
- Extract digits from a string in Java – Stack Overflow — Многообразные решения для извлечения чисел из строки.
- StringUtils (Apache Commons Lang 3.14.0 API) — Обзор функционала StringUtils.
- Trail: Learning the Java Language (The Java™ Tutorials) — Учебные материалы по Java для любого уровня подготовки.