Если вы хотите удалить все символы в категории Другое / Управляющий Unicode, вы можете сделать что-то вроде этого:
System.out.println(
"a\u0000b\u0007c\u008fd".replaceAll("\\p{Cc}", "")
); // abcd
Обратите внимание, что это фактически удаляет (среди прочих) '\u008f'
символ Unicode из строки, а не экранированную форму "%8F"
string.
Если черный список не захвачен одним блоком / категорией Unicode, Java имеет мощную арифметику класса символов с пересечением, вычитанием и т. Д., Которую вы можете использовать. В качестве альтернативы вы также можете использовать подход с отрицательным белым списком, то есть вместо того, чтобы явно указывать, какие символы недопустимы, вы указываете, что является законным, и все остальное затем становится недопустимым.
API ссылки
Примеры
Вот пример вычитания:
System.out.println(
"regular expressions: now you have two problems!!"
.replaceAll("[a-z&&[^aeiou]]", "_")
);
// _e_u_a_ e___e__io__: _o_ _ou _a_e __o __o__e__!!
[…]
- это класс символов . Нечто вроде [aeiou]
соответствует одному из строчных гласных. [^…]
является отрицательным классом символов. [^aeiou]
соответствует одному из всего, кроме строчных гласных.
[a-z&&[^aeiou]]
соответствует [a-z]
, вычитается из [aeiou]
, то есть всех согласных в нижнем регистре.
Следующий пример демонстрирует использование отрицательного белого списка:
System.out.println(
"regular expressions: now you have two problems!!"
.replaceAll("[^a-z]", "_")
);
// regular_expressions__now_you_have_two_problems__
Допустимы только строчные буквы a-z
; все остальное незаконно.