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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘宣超 中级黑马   /  2014-9-15 21:34  /  1990 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

今天做了几个黑马入学测试题这个写了半天又点小费劲,自己总结了下。

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

这个自己写的这个 还是比较容易理解吧,在网上看了些程序都比较复杂。

public class Test10 {
       
        public static void bytesubString(String str,int len){
               
                byte[] by = null;//初始化数组 赋值null;
                if(str!=null){//要截取的字符串不能为null
                        try {
                                by = str.getBytes("GBK");//把字符串转换成字节数组,编码。
                        } catch (UnsupportedEncodingException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
                else{
                        System.out.println("输入的值为null");
                        return;//如果为空就结束、
                }
                if(by.length<len){//如果len大于 字节数组的长度那么就无法截取了,
                        System.out.println("您输入的字符串长度错误。");
                        return;
                }
                String newstr = new String(by,0,len);//获取要截取的字符串
               
                if(!(newstr == str.substring(0, len))){//判断从源字符串上截取新字符串的位置上的那个字符串和这个新字符串是否相等
                        //如果不相等说明新字符串截取到了半个汉子,
                        //我们再判断这心字符串的长度是否小于2,如果小于2那么代表只有一个字节,而且那个自己还是半个汉子,所以把他的值改为null
                        if(newstr.length()<2){
                                newstr = null;
                        }
                       
                        else{
                                //否则我们把这个字符串的指针向左移动一个 减一个字节,就获得了这个新的字符串了
                                newstr = newstr.substring(0,len-1);
                        }
                }
                System.out.println(newstr);
                //打印这个新的字符串
        }
        public static void main(String[] args) {
               
                bytesubString("HM黑马", 4);
        }

}

评分

参与人数 1黑马币 +12 收起 理由
纷飞尽 + 12 很给力!

查看全部评分

10 个回复

倒序浏览
入学测试好难
回复 使用道具 举报
不错!:lol
回复 使用道具 举报
很好............
回复 使用道具 举报
             挺好
回复 使用道具 举报
这要判断ASC编码范围
回复 使用道具 举报
这个程序有点小问题,将这句 if(!(newstr == str.substring(0, len)))代码,改成if(!(str.contains(newStr)))就完美了
亲测,第一种确实有问题,第二种才是完美的
回复 使用道具 举报
其实刚开始接触陌生的题都觉得很难,接触多久好了。把思路打开了
回复 使用道具 举报
看到有人说入学测试难,我心里面就舒服多了
回复 使用道具 举报
你的比我的还难啊
回复 使用道具 举报
入学测试好难得说
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马