微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java不区分大小写的正则表达式匹配不符合字母Ñ

考虑这个程序:
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)是:

true
false

为什么?

解决方法

By default,case-insensitive matching assumes that only characters in the US-ASCII charset are being matched. Unicode-aware case-insensitive matching can be enabled by specifying the UNICODE_CASE flag in conjunction with this flag.

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#CASE_INSENSITIVE

为了完整;你或(|)旗帜在一起.

Pattern.compile(BIG_N,Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)

原文地址:https://www.jb51.cc/java/121409.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐