怎样判断一个字符是否为中文字

怎样判断一个字符是否为中文字?
http://www.matrix.org.cn/thread.shtml?topicId=95b99c6d-46d1-11db-af0b-0f766c077b58&forumId=19

 

中文字在unicode里用2字节表示的时候,编码(例如,UTF-16BE)是从4e00-9FBB
如果用char表示,第一个中文字是char c = 19968 (4e00)最后一个中文字,char c = 40891 (9FBB)
如果你是有char数组,直接比较就行了。小于19968大于40891都不是中文 *字*。中文的标点符号,在另外的编码段,具体可以去查www.unicode.org。不过我一般还是使用byte[2]来操作一个中文字,转string也比较方便。
用byte进行转换可以如下面:
byte[] b = new String("一").getBytes("UTF-16BE");
int k = b[0] & 0xFF;
int x = b[1] & 0xFF;
int sum = k * 256 + x;

sum = 19968
byte类型经过一次& 0xFF以后将直接转换成为int类型。

 

 

 

//判断是否中文字
public boolean checkChinese(char word){
   if ((word >= 0x4e00)&&(word<=0x9fbb)) return true;
   else return false;
}

 

 

 

 

 

java.lang.Character.UnicodeBlock.
有个CJK(china中,japan日,k??韩)的常量,有个专门的方法来判断的.JAVA的lib和API还是很全的

[System.out.println(Character.UnicodeBlock.of('中'));]

 

 

 

 

 

这两天在写一个关于中文的小程序,里面有点代码:
enum CharType{
        DELIMITER, //非字母截止字符,例如,.)( 等等 ( 包含U0000-U0080)
        NUM, //2字节数字1234
        LETTER, //gb2312中的,例如:ABC,2字节字符 同时包含 1字节能表示的 basic latin and latin-1
        OTHER,// 其他字符
        CHINESE;//中文字
}

        private CharType checkType(char c){
                CharType ct =null;
                
                //中文,编码区间0x4e00-0x9fbb
                if ((c >= 0x4e00)&&(c <= 0x9fbb)){
                        ct = CharType.CHINESE;
                }
                
                //Halfwidth and Fullwidth Forms, 编码区间0xff00-0xffef
                else if ( (c >= 0xff00) &&(c <= 0xffef)) {
                        //        2字节英文字
                        if ((( c >= 0xff21 )&&( c <= 0xff3a)) ||
                                        (( c >= 0xff41 )&&( c <= 0xff5a))){
                                ct = CharType.LETTER;
                        }
                        
                        //2字节数字
                        else if (( c >= 0xff10 )&&( c <= 0xff19)  ){
                                ct = CharType.NUM;
                        }
                        
                        //其他字符,可以认为是标点符号
                        else ct = CharType.DELIMITER;
                }
                
                //basic latin,编码区间 0000-007f
                else if ( (c >= 0x0021) &&(c <= 0x007e)){
                        //1字节数字
                        if (( c >= 0x0030 )&&( c <= 0x0039)  ){
                                ct = CharType.NUM;
                        }
                        //1字节字符
                        else if ((( c >= 0x0041 )&&( c <= 0x005a)) ||
                                        (( c >= 0x0061 )&&( c <= 0x007a)))        {
                                ct = CharType.LETTER;
                        }
                        //其他字符,可以认为是标点符号
                        else ct = CharType.DELIMITER;
                }
                
                //latin-1,编码区间0080-00ff
                else if ( (c >= 0x00a1) &&(c <= 0x00ff)){
                        if (( c >= 0x00c0 )&&( c <= 0x00ff)){
                                ct = CharType.LETTER;
                        }
                        else ct = CharType.DELIMITER;
                }
                else ct = CharType.OTHER;
                
                return ct;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值