"(?i)"无法与重音符号一起使用

12

我有一个Java方法,可以在一个短语中查找一个单词并忽略大小写,如果找到该单词,则从该短语中删除它。这个单词和短语可以是任何东西。它们是可变的。以下是我的代码:

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

除非单词带有重音符号,否则一切都运作得很完美。例如,如果单词是“álvarez”,短语是“Álvarez phrase”,那么它将无法工作,因为“(?i)”在这种情况下无法工作。

是否有办法使“(?i)”能够处理带重音符号的字符?

2个回答

26

将(?i)替换为(?iu) - 这将打开Unicode不区分大小写匹配。


4
我喜欢你的比我的好。加一分 :) - David Grant
@Konstantin .. 真简单!…谢谢 :) - Brad

4

默认情况下(?i)只能处理ASCII字符 - 详见Pattern.CASE_INSENSITIVE。你可以与UNICODE_CASE标志结合使用,如下所示:

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

2
@David .. 谢谢David。对于你的Konstantin解决方案的+1,我也给一个+1 :) ... 精神真好。 - Brad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接