在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