Java不区分大小写的正则表达式匹配不';t使用字母Ñ;
考虑一下这个计划:Java不区分大小写的正则表达式匹配不';t使用字母Ñ;,java,regex,Java,Regex,考虑一下这个计划: import java.util.regex.Pattern; public class xx { /* * Ñ * LATIN CAPITAL LETTER N WITH TILDE * Unicode: U+00D1, UTF-8: C3 91 */ public static final String BIG_N = "\u00d1"; /* * ñ * LATIN SMA
import java.util.regex.Pattern;
public class xx {
/*
* Ñ
* LATIN CAPITAL LETTER N WITH TILDE
* Unicode: U+00D1, UTF-8: C3 91
*/
public static final String BIG_N = "\u00d1";
/*
* ñ
* LATIN SMALL LETTER N WITH TILDE
* Unicode: U+00F1, UTF-8: C3 B1
*/
public static final String LITTLE_N = "\u00f1";
public static void main(String[] args) throws Exception {
System.out.println(BIG_N.equalsIgnoreCase(LITTLE_N));
System.out.println(Pattern.compile(BIG_N, Pattern.CASE_INSENSITIVE).matcher(LITTLE_N).matches());
}
}
由于ñ是ñ的大写版本,因此您希望它打印:
true
true
但它实际打印的内容(java 1.7.0_17-b02)是:
为什么?
默认情况下,不区分大小写的匹配假定仅匹配US-ASCII字符集中的字符。可以通过将Unicode_case标志与此标志一起指定来启用支持Unicode的不区分大小写匹配
和完整性;您或(|
)将标志放在一起
Pattern.compile(BIG_N, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)
哦!旧的美国ASCII再次抬起它丑陋的头。谢谢谢谢我想早点去,但太早了。然后是吃晚饭的时候了。塔可之夜。
Pattern.compile(BIG_N, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)