在Java中我们需要判断字符串string 是否为合法输入或者是否为中文,Java中对字符及字符串是否为中文的判断调用了Character.UnicodeBlock。在Java中的中文包括:中文汉字、中文输入法下的标点、符号(半角、全角形式区分);在Character.UnicodeBlock中定义了相关的内容如下:

  • Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS : 4E00-9FBF:CJK 统一表意符号
  • Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS :F900-FAFF:CJK 兼容象形文字
  • Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A :3400-4DBF:CJK 统一表意符号扩展 A;CJK的意思是“Chinese,Japanese,Korea”的简写 ,实际上就是指中日韩三国的象形文字的Unicode编码
  • Character.UnicodeBlock.GENERAL_PUNCTUATION :2000-206F:常用标点
  • Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION :3000-303F:CJK 符号和标点
  • Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS :FF00-FFEF:半角及全角形式

 

以下列出在java中常用的判断

  • 一个字符是否为汉字;
  • 一个字符是否为中文;
  • 字符串是否为中文;
  • 字符串中是否包含特定字符

源代码

package com.log.main;
import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IsChese {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		char a = '你';
		char b = '.';
		char c = '。';
		char d = '、';
		char e = 'a';
		
		
 		System.out.println(">>>>>>>>>a:"+isChinese(a));
 		System.out.println(">>>>>>>>>b:"+isChinese(b));
 		System.out.println(">>>>>>>>>c:"+isChinese(c));
 		System.out.println(">>>>>>>>>d:"+isChinese(d));
 		System.out.println(">>>>>>>>>e:"+isChinese(e));
		
		
	}
	
	

///
	   
	   /**
	    * 校验一个字符是否是汉字
	    * 
	    * @param c
	    *      被校验的字符
	    * @return true代表是汉字
	    */
	   public static boolean isChineseChar(char c) {
	     try {
	       return String.valueOf(c).getBytes("UTF-8").length > 1;
	     } catch (UnsupportedEncodingException e) {
	       e.printStackTrace();
	       return false;
	     }
	   }
	  
	   /**
	    * 验证字符串内容是否包含下列非法字符<br>
	    * `~!#%^&*=+\\|{};:'\",<>/?○●★☆☉♀♂※¤╬の〆
	    * 
	    * @param content   字符串内容
	    * @return 't'代表不包含非法字符,otherwise代表包含非法字符。
	    */
	   public static char validateLegalString(String content) {
	     String illegal = "`~!#%^&*=+\\|{};:'\",<>/?○●★☆☉♀♂※¤╬の〆";
	     char isLegalChar = 't';
	     Code1: for (int i = 0; i < content.length(); i++) {//L1定义代码块L1
	       for (int j = 0; j < illegal.length(); j++) {
	         if (content.charAt(i) == illegal.charAt(j)) {
	           isLegalChar = content.charAt(i);
	           break Code1;
	         }
	       }
	     }
	     return isLegalChar;
	   }
	  
	   /**
	    * 验证是否是汉字或者0-9、a-z、A-Z
	    * 
	    * @param c
	    *      被验证的char
	    * @return true代表符合条件
	    */
	   public static boolean isRightChar(char c) {
	     return isChinese(c) || isWord(c);
	   }
	  
	   /**
	    * 校验某个字符是否是a-z、A-Z、_、0-9
	    * 
	    * @param c
	    *      被校验的字符
	    * @return true代表符合条件
	    */
	   public static boolean isWord(char c) {
	     String regEx = "[\\w]";
	     Pattern p = Pattern.compile(regEx);
	     Matcher m = p.matcher("" + c);
	     return m.matches();
	   }
	  
	   /**
	    * 判定输入的是否是汉字
	    * 
	    * @param c
	    *      被校验的字符
	    * @return true代表是汉字
	    */
	   public static boolean isChinese(char c) {
	     Character.UnicodeBlock ub = 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.GENERAL_PUNCTUATION
	         || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
	         || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
	       return true;
	     }
	     return false;
	   }
	  
	   /**
	    * 校验String是否全是中文
	    * 
	    * @param name
	    *      被校验的字符串
	    * @return true代表全是汉字
	    */
	   public static boolean checkNameChese(String name) {
	     boolean res = true;
	     char[] cTemp = name.toCharArray();//转换为数组
	     for (int i = 0; i < name.length(); i++) {
	       if (!isChinese(cTemp[i])) {//逐个判断是否为中文
	         res = false;
	         break;
	       }
	     }
	     return res;
	   }
	   
	   
}

输出结果:

>>>>>>>>>a:true
>>>>>>>>>b:false
>>>>>>>>>c:true
>>>>>>>>>d:true
>>>>>>>>>e:false