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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



public clas XXX{

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

         */
        public static void main(String[] args) {
                final int num =7; //num代表要截取的字节数量
                String s ="HM程序s员";
                byte[] b = s.getBytes();
                byte[] b1 = new byte[1];//用来存放字符的字节
                byte[] b2 = new byte[2];//用来存放中文的字节

                for (int i = 0; i < num; i++) {
                        //如果读取的字节大于0,说明是一个字符,当然中文的第二个字节也有可能大于0(0x40-0xFE),
                        //所以如果第一个字节小于0,就要连续跳过两个字节;
                        if(b[i]>=0){
                                b1[0] = b[i];//如果此字节小于0,则直接转换成字符;
                                System.out.println(new String(b1));
                        }
                        //如果小于0,则说明是中文的一个字节;
                        else{
                                if(i<num)
                                        b2[0] = b[i++];
                                if(i<num){ //如果i大于num,说明已经读到最后一个字节,但是此字节是中文的半个字节,无法组成字符,ze不打印
                                        b2[1] = b[i];         //这里i不能再++,因为for循环里面i++,如果加的话就会跳过一个字节
                                        System.out.println(new String(b2));
                                }
                                       
                        }
                               
                               
                               
                }
        }

}


7 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
我写的就是另一种解法
回复 使用道具 举报
还有一种方法从第三个字符到第七个字符开始取长度判断字节。本位长度减去前一位长度为偶数,说明有中文。实际上只要比较字节长度为678这三个就好了。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
fan0920 初级黑马 2016-10-15 22:41:03
7#
如果有负数的话,怎么判断呢?
回复 使用道具 举报
GXM 中级黑马 2016-10-15 22:49:35
8#
赞,要四个字节~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马