2015-08-03 2 views
2

Мне нужно заменить все нецифровые символы в строке. Например:Как заменить все нецифровые символы в строке?

String: 987sdf09870987=-0\\\`42 
Replaced: 987**sdf**09870987**=-**0**\\\`**42 

Это все нецифровой символ последовательности, завернутая в ** Charaters. Как я могу это сделать с String::replaceAll()?

(?![0-9]+$).* 

Регулярное выражение не соответствует тому, что я хочу. Как я могу это сделать?

+1

'string.replaceAll (" [^ 0-9] "," ")' – SimY4

+0

@ SimY4 Не работает. Что я должен заменить? – user3663882

ответ

2
(\\D+) 

Вы можете использовать это и заменить на **$1**. См. Демонстрационную версию.

https://regex101.com/r/fM9lY3/2

+0

Вы имеете в виду 'string.replaceAll (" \\ D + "," ** ")'? – user3663882

+0

Тогда это не сработает. Мне нужно обернуть char-sequence в '** **', а не просто скопировать его с помощью '**'. – user3663882

+0

@ user3663882 действительно согласен, если это сработало для вас – vks

1

Вы можете использовать отрицание класса символов для нецифры и используйте 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. Я не думаю, что это может вам помочь, так как вам нужно на самом деле матч не номера, а не только отметьте, если цифры отсутствуют.