A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张亚青 于 2013-3-11 12:35 编辑

如何在截取字符串时判断字节是字母或者汉字,求大牛们给介绍下字节流中字母、数字、中英文标点及汉字的存储和表示形式!!!
追:最好附JAVA 实现的代码!!!

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 偏執旳、靑春 于 2013-3-2 12:35 编辑

这个问题
说简单也简单,说难也难,问题是看你处理的内容是怎么样的?
说白了就是取一个字符,判断一下ASCII码,看看Ascii在不在里面
我给你写一个吧。
class Demo
{
    public void match(String str)
   {
      for(int i=0;str.length()-1;i++)
      {
         String c=str.subString(i,i+1);
            byte[] =c.getBytes();
             if(c[0]<0)
              {
             sop("汉字")
          }else{
               sop("不是汉字")
}


      }


   }
}
中文byte的第一个字节数都是负数
其实还是用正则方法判断比较好!!这个目前还没学吧。
其实实现这个的方式很多,不过正则表达式就是专门用来过滤字符的,非常好用,等以后来黑马了,可能会学到的。

点评

好像汉字是两个字节,英文和符号是一个字节,从长度上还需要判断一下吧。  发表于 2013-3-3 13:35

评分

参与人数 2技术分 +1 黑马币 +6 收起 理由
贾文泽 + 1
张亚青 + 6 赞一个!

查看全部评分

回复 使用道具 举报
通过ASCII码判断
回复 使用道具 举报
其实这涉及到了unicode的相关知识,特别详细的你可以百度一下。我这里只说几点:
在通过调用unicode的时候,其实,对于汉字,字母或者一些符号而言,都是有两个字节组成(当然,有些符号或者语言用两个字节表示不了,就用三个字节表示,这里只说常用的)。
对于汉字,两个字节可能为负整数,可能为正整数,但首字节一定不为0;而字母和符号的首字节是0,第二个字节是一个正整数。比如说字母a在unicode编码表中对应的是097。
需要说明的一点是,在获取的unicode中,前两个字节是固定的为:-2和-1。
而你直接使用字节的话,基本上汉字的两个字节都是负整数,而字母和符号只有一个字节,为正整数,当然这是由ASCII得来的,因为你获取的是ASCII中对应的值,汉字就是用两个负数表示的。
你可以测试一下:
  1. class DemoBZ
  2. {
  3.         public static void main(String[] args)throws Exception//此处必须抛出异常,为了省事,我就抛个大的
  4.         {
  5.                 //测试一,测试ASCII编码
  6.                 //定义字符串
  7.                 String s1 = "a我-b零";
  8.                 //将字符串转为字节数组
  9.                 byte[] b = s1.getBytes();
  10.                 //打印字节数组中的元素
  11.                 for(int i=0;i<b.length;i++)
  12.                 {
  13.                         System.out.println("b[" + i + "]=" + b[i]);
  14.                 }
  15.                 System.out.println("--------------------");
  16.                 //测试二,测试unicode编码
  17.                 String s2 = "a我-b零";
  18.                 byte[] u = s2.getBytes("Unicode");
  19.                 for(int i=0;i<u.length;i++)
  20.                 {
  21.                         System.out.println("u[" + i + "]=" + u[i]);
  22.                 }
  23.         }
  24. }
复制代码
具体请看:
http://blog.csdn.net/lubiaopan/article/details/4714909

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
贾文泽 + 1
张亚青 + 10

查看全部评分

回复 使用道具 举报
偏執旳、靑春 发表于 2013-3-2 12:33
这个问题
说简单也简单,说难也难,问题是看你处理的内容是怎么样的?
说白了就是取一个字符,判断一下ASCI ...

这么简单,我还真不知道!!!有时间我再验证一下,先谢过
回复 使用道具 举报
偏執旳、靑春 发表于 2013-3-2 12:33
这个问题
说简单也简单,说难也难,问题是看你处理的内容是怎么样的?
说白了就是取一个字符,判断一下ASCI ...

这么简单,我还真不知道!!!有时间我再验证一下,先谢过
回复 使用道具 举报
黄玉昆 黑马帝 2013-3-11 12:07:38
7#
请在截图所示位置修改分类

回复 使用道具 举报
黄玉昆 发表于 2013-3-11 12:07
请在截图所示位置修改分类

不好意思,刚刚看到,已经改成未解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马