zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java完美判断中文字符的方法

JAVA中文字符方法 判断 完美
2023-06-13 09:14:46 时间

Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00?0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比如:,。等等是不能识别的。

以下是比较完善的判断方法:CharUtil.java

复制代码代码如下:


importjava.util.regex.Pattern;

publicclassCharUtil{

   publicstaticvoidmain(String[]args){
       String[]strArr=newString[]{"www.micmiu.com","!@#$%^&*()_+{}[]|\""?/:;<>,.","!¥……()——:;“”‘"《》,。?、","不要啊","やめて","韩佳人","???"};
       for(Stringstr:strArr){
           System.out.println("===========>测试字符串:"+str);
           System.out.println("正则判断结果:"+isChineseByREG(str)+"--"+isChineseByName(str));
           System.out.println("Unicode判断结果:"+isChinese(str));
           System.out.println("详细判断列表:");
           char[]ch=str.toCharArray();
           for(inti=0;i<ch.length;i++){
               charc=ch[i];
               System.out.println(c+"-->"+(isChinese(c)?"是":"否"));
           }
       }
   }

   //根据Unicode编码完美的判断中文汉字和符号
   privatestaticbooleanisChinese(charc){
       Character.UnicodeBlockub=Character.UnicodeBlock.of(c);
       if(ub==Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS||ub==Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
               ||ub==Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A||ub==Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
               ||ub==Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION||ub==Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
               ||ub==Character.UnicodeBlock.GENERAL_PUNCTUATION){
           returntrue;
       }
       returnfalse;
   }

   //完整的判断中文汉字和符号
   publicstaticbooleanisChinese(StringstrName){
       char[]ch=strName.toCharArray();
       for(inti=0;i<ch.length;i++){
           charc=ch[i];
           if(isChinese(c)){
               returntrue;
           }
       }
       returnfalse;
   }

   //只能判断部分CJK字符(CJK统一汉字)
   publicstaticbooleanisChineseByREG(Stringstr){
       if(str==null){
           returnfalse;
       }
       Patternpattern=Pattern.compile("[\\u4E00-\\u9FBF]+");
       returnpattern.matcher(str.trim()).find();
   }

   //只能判断部分CJK字符(CJK统一汉字)
   publicstaticbooleanisChineseByName(Stringstr){
       if(str==null){
           returnfalse;
       }
       //大小写不同:\\p表示包含,\\P表示不包含
       //\\p{Cn}的意思为Unicode中未被定义字符的编码,\\P{Cn}就表示Unicode中已经被定义字符的编码
       Stringreg="\\p{InCJKUnifiedIdeographs}&&\\P{Cn}";
       Patternpattern=Pattern.compile(reg);
       returnpattern.matcher(str.trim()).find();
   }
}