Подтвердить что ты не робот

"(? i)" не работает с акцентами

У меня есть метод Java, который ищет слово внутри фразы, игнорируя чувствительность к регистру слова, и если он находит слово, то он удаляет его из фразы. Слово и фраза могут быть любыми. Они варианты. Вот мой код:

private String removeWord( String phrase, String word ) {
    phrase = phrase.replaceAll( "(?i)" + word , "" );
    return phrase;
}

Все работает отлично, если только слово не имеет акцента. Например, если слово " álvarez", а фраза " фраза Álvarez", то это не сработает, поскольку "(? I)" не работает в этом случай.

Есть ли способ сделать "(? i)" работать с акцентированными символами?

4b9b3361

Ответ 1

Просто замените (? i) на (? iu) - он включит юникод, не учитывающий регистр,

Ответ 2

По умолчанию (?i) работает только с символами ASCII - подробнее см. Pattern.CASE_INSENSITIVE. Вы можете объединить этот флаг с UNICODE_CASE вместе так:

phrase = Pattern.compile(word, UNICODE_CASE | CASE_INSENSITIVE).matcher(phrase).replaceAll("");