Как удалить все символы, кроме цифр с помощью метода replaceAll()?

Как удалить все символы, кроме цифр с помощью метода replaceAll()?


Ответы (2 шт):

Автор решения: Ivan Shatsky

Используя регулярное выражение [^\d]+ (в квадратных скобках мы указываем набор символов, которые нас интересуют, \d обозначает любую цифру, специальный символ ^ внутри квадратных скобок, будучи первым, имеет значение "всё, кроме далее перечисленного", + - "жадный" квантификатор "один или больше").

Пример:

import java.util.Date;
import java.util.Formatter;

public class Main
{
    public static void main(String[] args) {
        String formattedDate = String.format("%1$tb %1$te, %1$tY, %1$tH:%1$tM", new Date());
        String onlyDigits = formattedDate.replaceAll("[^\\d]+", "");
        System.out.println(formattedDate);
        System.out.println(onlyDigits);
    }
}
Apr 28, 2025, 07:22
2820250722

Дополнение

В комментариях напомнили про мета-символ \D, который соответствует любому символу кроме цифры. Действительно в данном случае лучше использовать именно его:

...
String onlyDigits = formattedDate.replaceAll("\\D+", "");
...
→ Ссылка
Автор решения: Stanislav Volodarskiy

Отыскать все не-цифры и заменить их на пустые строки:

String text = ...;

//                          \D совпадает с не-цифрами 
//                   (\\ - из-за оформления строк в Java)
//                                |
//                                v
//                              -----
String digits = text.replaceAll("\\D", "");
//                                     --
//                                     ^
//                                     |
//                         удаляем (заменяем на пустоту)

→ Ссылка