有关中文字符的判断

粗糙地说,可以简单地认为如果字符占用1个字节,则为英文;占用2个即为中文。它粗糙是因为占用2个字节的字符除了中文之外,还有很多语言(如日文、俄文等)。不过,一般来说,我们所见到的就是这两种,所以也未尝不是一个方法。实现起来很简单:
  char ch1 = 'A';
  String s1 = Character.toString(ch1);
  byte[] b1 = s1.getBytes();
  if (b1.length == 2)
   System.out.println("/n中文字符");
  else
   System.out.println("/n不是中文字符");
 

还有一种方法,道理是一样的:
  char ch1 = 'A';
  String s1 = Character.toString(ch1);
  byte[] b1 = s1.getBytes();
  if (b1[0] > 127)
   System.out.println("/n中文字符");
  else
   System.out.println("/n不是中文字符");
 

还有第三种方法,更为直观:
  char ch1 = 'A';
  if ((char)(byte)ch1!=ch1)
   System.out.println("/n中文字符");
  else
   System.out.println("/n不是中文字符");

 

当然,如果是在一些特殊的场合,可能需要更精确地判断。这样,只好参照UNICODE的中文码表了。因为:gb2312的内码范围是:B0A1-FEFE,故实现起来把第一种方法的if改成:
  if (b1.length == 2 && ((b1[0]+256)*256 + (b1[1]+256)) >= 0xB0A1 && ((b1[0]+256)*256 + (b1[1]+256)) <= 0xFEFE)
   System.out.println("/n中文字符");
  else
   System.out.println("/n不是中文字符");

 

一般情况下,第一类方法就足够了。不用为了所谓的“完美”而太伤神,记住:世间本没有完美。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值