Вы можете использовать отрицание класса символов для нецифры и используйте 0th группы обратной ссылку, чтобы избежать накладных расходов с захватом групп (она минимальна здесь, но все же есть):
String x = "987sdf09870987=-0\\\\\\`42";
x = x.replaceAll("[^0-9]+", "**$0**");
System.out.println(x);
См. demo on IDEONE. Выход: 987**sdf**09870987**=-**0**\\\`**42
.
Кроме того, в Java регулярное выражение, классы персонажей выглядят аккуратнее, чем несколько символов побега, поэтому я предпочитаю этот [^0-9]+
рисунок означает матч 1 или больше (+
) символы, кроме (из ^
) цифр от 0
до 9
([0-9]
).
Несколько слов о вашем (?![0-9]+$).*
regex. Он состоит из отрицательного вида (?![0-9]+$)
, который проверяет, нет ли только цифр (если есть только цифры до конца строки, совпадение не получается) и .*
, соответствующих любым символам, но символу новой строки. Вы можете увидеть пример того, что он делает here. Я не думаю, что это может вам помочь, так как вам нужно на самом деле матч не номера, а не только отметьте, если цифры отсутствуют.
'string.replaceAll (" [^ 0-9] "," ")' – SimY4
@ SimY4 Не работает. Что я должен заменить? – user3663882