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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夜hen冷 中级黑马   /  2014-11-12 10:35  /  1209 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
这个怎么做啊

4 个回复

倒序浏览
看我的博客:http://www.cnblogs.com/yueyazhishang/p/3985127.html
回复 使用道具 举报
        public static String get(String str,int in)
        {

                int index=in-1;//记录指针位置
                byte[]by=str.getBytes();
                if(index>by.length||index<0)
                        throw new RuntimeException("截取字节数为零,或者截取字节数超过了字符串长度");       
                int num=index;//为了保留index初始位置,因此定义一个num
                while(by[num]<0)
                {//循环至指针到0,或者非中文字符,若非中文字符不用进循环,直接返回
                        if(num==0)
                                break;
                        num--;
                }
        if((index-num)%2!=0)//指针移动量若为偶数,代表原来指针所在为汉字字符的第二个字节,可以输出此字节
                        return new String(by,0,index);
               
               
               
                return new String(by,0,index+1);
       
        }
}
回复 使用道具 举报
加油 发表于 2014-11-12 17:26
public static String get(String str,int in)
        {

仅仅复制了 函数部分,字符串自己定义
回复 使用道具 举报
public static String get(String str,int in)
        {

                int index=in-1;//记录指针位置
                byte[]by=str.getBytes();
                if(index>by.length||index<0)
                        throw new RuntimeException("截取字节数为零,或者截取字节数超过了字符串长度");       
               
                if(by[index]>0)
                        return new String(by,0,index+1);
                int num=index;//为了保留index初始位置,因此定义一个num
       
                while(by[num]<0)
                {//循环至指针到0,或者非中文字符,若非中文字符不用进循环,直接返回
                        if(num==0)
                        {
                                num--;
                                break;
                        }
                        num--;
                }
       
        if(num<0)
        {
                if(index%2==0)
                        return new String(by,0,index);
                        return new String(by,0,index+1);
               
        }
       
        if((index-num)%2!=0)//指针移动量若为偶数,代表原来指针所在为汉字字符的第二个字节,可以输出此字节
                        return new String(by,0,index);
               
               
               
                return new String(by,0,index+1);
       
        }刚才的错了点 ,精简的太多了 出错了 这个还好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马