黑马程序员技术交流社区

标题: 基础测试10题 [打印本页]

作者: 夜hen冷    时间: 2014-11-12 10:35
标题: 基础测试10题
编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
这个怎么做啊
作者: yueyazhishang    时间: 2014-11-12 11:51
看我的博客:http://www.cnblogs.com/yueyazhishang/p/3985127.html
作者: 加油    时间: 2014-11-12 17:26
        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:27
加油 发表于 2014-11-12 17:26
public static String get(String str,int in)
        {

仅仅复制了 函数部分,字符串自己定义
作者: 加油    时间: 2014-11-12 18:05
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);
       
        }刚才的错了点 ,精简的太多了 出错了 这个还好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2