Ответ 1
Просто замените (? i) на (? iu) - он включит юникод, не учитывающий регистр,
У меня есть метод Java, который ищет слово внутри фразы, игнорируя чувствительность к регистру слова, и если он находит слово, то он удаляет его из фразы. Слово и фраза могут быть любыми. Они варианты. Вот мой код:
private String removeWord( String phrase, String word ) {
phrase = phrase.replaceAll( "(?i)" + word , "" );
return phrase;
}
Все работает отлично, если только слово не имеет акцента. Например, если слово " álvarez", а фраза " фраза Álvarez", то это не сработает, поскольку "(? I)" не работает в этом случай.
Есть ли способ сделать "(? i)" работать с акцентированными символами?
Просто замените (? i) на (? iu) - он включит юникод, не учитывающий регистр,
По умолчанию (?i)
работает только с символами ASCII - подробнее см. Pattern.CASE_INSENSITIVE. Вы можете объединить этот флаг с UNICODE_CASE вместе так:
phrase = Pattern.compile(word, UNICODE_CASE | CASE_INSENSITIVE).matcher(phrase).replaceAll("");