我需要一个字符串是否为纯中文字符。java这个对编码格式有要求吗?? UTF-8 和GBK

解决方案 »

  1.   

    应该没有要求,JAVA统一用UNICODE编码,两个字节数组表示一个汉字。
      

  2.   

    用这则表达式。你是要在页面验证还是在JAVA代码里?
      

  3.   

    我对正则表达式没有研究,刚才小试了一下,貌似能用。希望高手提出更好的        //JAVA使用的字符集是 Unicode,可以说是包含了世界所有国家的常用字符
            
            String str = "中方法国";
            Pattern p = Pattern.compile("[\u4E00-\u9FA5]+");
            Matcher m = p.matcher(str);
            System.out.println(m.matches());// 打印结果 true        str = "aa附件";
            m = p.matcher(str);
            System.out.println(m.matches());// 打印结果 false
      

  4.   

    这样也可以,不过这样比 [\u4E00-\u9FA5]+ 要好一些,如果 Unicode 字符集在 9FA6 上增加了一个汉字的话,这个表达式就无效了,但是下面这个还是可以判断的。String str = ...;
    boolean isChinese = str.matches("[\\p{InCJK Unified Ideographs}&&\\P{Cn}]]+");\\p{InCJK Unified Ideographs} 表示 Unicode 块为 CJK Unified Ideographs 的字符,根据 Unicode 规范这个块的范围为 U+4E00~U+9FFF
    \\P{Cn} 表示已经被定义过的字符,而不是空码注意上面两个“p”的大小写!两者使用 && 表示在 4E00~9FFF 之间所有已经被定义过的字符
      

  5.   

    \\p 表示包含,\\P 表示不包含\\p{Cn} 的意思为 Unicode 中未被定义字符的编码,那使用 \\P{Cn} 就表示 Unicode 中已经被定义字符的编码了,呵呵。像 Cn 这种称为 Unicode 属性,是由 Unicode 定义的,可以在这里找到所有的 Unicode 属性
    http://www.unicode.org/reports/tr18/ 1.2 节中。不过 Java 中并不是能支持所有的 Unicode 属性。具体的支持可以从 Pattern$categoryNames 类中找到,也可以在 Character API DOC 的常量字段中找到。
      

  6.   

    学习了MARK下
    回复内容太短了!回复内容太短了!回复内容太短了!回复内容太短了!回复内容太短了!
      

  7.   

    3楼的执行没问题   但是需要引用个包 import java.util.regex.*;5楼的执行有问题   字符串全是中文也是false