Graceful Java Programming 优雅Java编程 之 常用汉字一二级字库识别

本文介绍了一个用于验证字符串是否完全由GB2312标准汉字组成的工具类。该工具类通过逐字符检查来确保所有字符都属于GB2312标准汉字集,并能排除非可见分隔符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把自己做的工具类留个档,同时分享给大家

import java.io.UnsupportedEncodingException;

/**
* 国标汉字检查工具类
* @author 林良益
*
*/
public class GBHZUtil {
//可忽略的分隔符号
private static final String skipChar = "[\\s\\t\\r\\n]";

private static final String NOGB2312CHAR = "不是GB2312字符";
private static final String GB2312CHAR_NOHZ = "GB2312非汉字字符";
private static final String GB2312CHAR_HZ = "GB2312汉字字符";



/**
* 检查字符窜是否是国标字库一二级标准字库汉字
* 如果含有国标一二级字库外的汉字则返回false
* @param orgString
* @return
* @throws UnsupportedEncodingException
* 抛出改异常说明当前的java虚拟机运行环境不支持GB2312编码
*/
public static boolean validateGB2312HZ(String orgString) throws UnsupportedEncodingException{
//忽略字符中的不可见分隔符
String noSkipCharStr = orgString.replaceAll(skipChar, "");
if("".equals(noSkipCharStr)){
return false;
}
char[] charArray = noSkipCharStr.toCharArray();
String identifyResult = null;
for(char c : charArray){
identifyResult = identifyGB2312Char(c);
if(!GB2312CHAR_HZ.equals(identifyResult)){
return false;
}
}
return true;
}

/**
* 识别GB2312字符
* @param theChar
* @return
* @throws UnsupportedEncodingException
* 抛出改异常说明当前的java虚拟机运行环境不支持GB2312编码
*/
public static String identifyGB2312Char(char theChar)throws UnsupportedEncodingException{
//将字符窜转成GB2312编码
byte[] byteArray = String.valueOf(theChar).getBytes("GB2312");
//根据国标区位码编码规则,判断字符
int highBit = 0;
for(int i = 0 ; i < byteArray.length ; i++){
int offset = (byteArray[i] & 0xFF) - 0xA0;
//GB2312字符区码在1-94
if(offset >= 1 && offset <= 94){
if(highBit == 0){
//找到一个汉字区码
highBit = offset;
}else{
//找到一个GB2312位码
if(highBit < 16 || highBit > 87){
return GB2312CHAR_NOHZ;
}else{
//位码在1-94区间 (其中对于第55 区的位码,最大为89
if(highBit == 55 && offset > 89){
return GB2312CHAR_NOHZ;
}else{
return GB2312CHAR_HZ;
}
}
}
}else{
//不是一个GB2312字符
return NOGB2312CHAR;
}
}
return NOGB2312CHAR;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值