Страницы

Поиск по вопросам

вторник, 18 июня 2019 г.

Как заменить символы в строке

Необходимо написать программу которая заменяет измененные слова. Например, есть строка "Ты ду_Р-ак или нет?" в данной строке необходимо заменить подстроку ду_Р-ак на ***. Как написать регулярное выражение если пользователь будет пытаться схитрить и писать слово "дурак" через тире, нижний пробел или другие символы, или если часть слова будет написана на латинице а часть на кириллице.
public static void main(String[] args) { String string = "Ты ду_рак или Дур_ак чудак?";
String lower = string.toLowerCase();
String pattern = "дурак"; String p ="***";
String newString = lower.replaceAll(pattern, p); System.out.println(newString); }


Ответ

Предлагаю
[дd][\W_]?[уy][\W_]?[рpr][\W_]?[аa][\W_]?[кk]
См. демо регулярного выражения (необходимо использовать модификатор CASE_INSENSITIVE и UNICODE_CHARACTER_CLASS).
Пояснение
[дd] - д или d [\W_]? - необязательный (? находит 1 или 0 совпадений) символ, отличный от букв и цифр [уy] - р, p или r [\W_]? - необязательный символ, отличный от букв и цифр [рpr] - р, p или r [\W_]? - необязательный символ, отличный от букв и цифр [аa] - а или a [\W_]? - необязательный символ, отличный от букв и цифр [кk] - к или k
Если "лишних" символов может быть больше одного, замените ? на * в [\W_]?, а если нужно исключить пробел, можно использовать [\W_&&[^\s]]? (не забудьте о двойных обратных слешах в Java).
См. демо на IDEONE
String string = "Ты ду_рак или Дур_ак чудак?"; String pattern = "(?iU)[дd][\\W_]?[уy][\\W_]?[рpr][\\W_]?[аa][\\W_]?[кk]"; String p ="***"; String newString = string.replaceAll(pattern, p); System.out.println(newString);

Комментариев нет:

Отправить комментарий