java挑出一个字符串中的汉字_JAVA 判断string字符串中是否有汉字 | 学步园

转自:http://mr-cheney.javaeye.com/blog/685687

第一种方法:

public boolean gbk(String str)

char[] chars=str.toCharArray();

boolean isGB2312=false;

for(int i=0;i

byte[] bytes= (""+chars[i]).getBytes();

if(bytes.length==2){

int[] ints=new int[2];

ints[0]=bytes[0]& 0xff;

ints[1]=bytes[1]& 0xff;

if(ints[0]>=0x81 && ints[0]<=0xFE && ints[1]>=0x40 && ints[1]<=0xFE){

isGB2312=true;

break;

}

}

}

return isGB2312;

第二种方法:

java用的是Unicode 编码char 型变量的范围是0-65535 无符号的值,可以表示

65536个字符,基本上地球上的字符可被全部包括了,实际中,我们希望判断一个字符是不是汉字,或者一个字符串里的字符是否有汉字来满足业务上的需

求,String类中有个这样的方法可得到其字符长度length() ,看下面例子:

String s1 = "我是中国人";

String s2 = "imchinese";

String s3 = "im中国人";

System.out.println(s1+":"+new String(s1).length());

System.out.println(s2+":"+new String(s2).length());

System.out.println(s3+":"+new String(s3).length());

OUTPUT:

我是中国人:5

imchinese:9

im中国人:5

看到了吧,字符串里如果有双字节的字符java就把每个字符都按双字节编码,

如果都是单字节的字符就按单字节编码

于是按照以上的规律,结合一位QQ昵称 ?G茶?I珠海

兄的提示由以下解决方法,就是判断字符串的长度和字符字节的长度是否相同来判断是否有双字节的字符

System.out.println((s1.getBytes().length == s1.length())?"s1无汉字":"s1有汉字");

System.out.println((s2.getBytes().length == s2.length())?"s2无汉字":"s2有汉字");

System.out.println((s3.getBytes().length == s3.length())?"s3无汉字":"s3有汉字");

OUTPUT:

s1有汉字

s2无汉字

s3有汉字 //

且慢,这样诚然可以判断出来一个串中是否有双字节编码的字符,但是要精确判断是否有汉

字就有些麻烦了,我们知道还有许多其他国家的字符在Unicode中是双字节的.

于是,需要进一步确定汉字的编码范围怎么确定呢,我用了一个笨办法那就是先在记事本输出0-65535之间的字符,通过观察发现第一个汉字是'一'最后一个是'??'(现在我也不认识);这下好了判断汉字就容易多了比

如我们可以通过比较字符的编码范围,最后给大家一些我试验的结果汉字基本集中在[19968,40869]之间,共有20901个汉字(是不是少了点,算

算你能认识多少)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值