2017-02-10 7 views
4

Скажут, у меня есть следующий кодJava replaceAll терпит неудачу со знаком доллара в исходной строке

String test = "$abc<>"; 
test = test.replaceAll("[^A-Za-z0-9./,#-' ]", ""); 

тест в настоящее время «$ а».

Зачем он держит знак доллара?

+2

Знак доллара находится между x23 и x27. Он должен был это сообразить. О, но поскольку класс отрицается, он исключается. Который оставил бы # $% & ' – sln

ответ

11

Ваш список символов для сохранения включает #-', которая является диапазон от Unicode U + 0023 (# символа) до U + 0027 (на ' символ), в том числе $ (U + 0024).

Если вы имели в виду #-' быть истолковано как список из трех персонажей, просто избежать его:

test = test.replaceAll("[^A-Za-z0-9./,#\\-' ]", ""); 

или положить его в конце списка:

test = test.replaceAll("[^A-Za-z0-9./,#' -]", ""); 
7

Потому что вы должны поместить - в качестве последнего символа в свой класс символов.

Попробуйте

test.replaceAll("[^A-Za-z0-9./,#' -]", ""); 

Он будет работать :)

Смотрите также In a java regex, how can I get a character class e.g. [a-z] to match a - minus sign?

и Javadoc для Pattern (Ctrl-F "Классы символов")

Примечание что в классе персонажа действует другой набор метасимволов, чем вне символа er класс. Например, регулярное выражение. теряет свое особое значение внутри класса персонажа, а выражение - становится метасимволом диапазона.

Смежные вопросы