黑马程序员技术交流社区

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

作者: 拂袖叙五代    时间: 2015-10-5 15:30
标题: 基础考试题
刚做了基础测试,发现下面的题目挺绕的,自己写了一个方法,给大家参考。

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

public class Test10 {

        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
                // TODO Auto-generated method stub
                System.out.println(subStr("HM程序员",3));
        }
       
        /*
         * 思路:通过比较新子串和源字符串最后位置上的字符是否相等来判断新子串中最后一个字节是否为半个汉字,
         * 如果相同则说明最后截取的是一个完整的汉字,如果不同则说明新子串的字节数组最后一个字节是一个汉字的半边,需要舍弃,
         * 所以数组指针向左移一位,以保证完整的汉字输出。
         */
        public static String subStr(String str,int num) throws Exception{
                //将源字符串转换为byte数组
                byte[] b=str.getBytes("GBK");
                //如果截取长度等于0或者大于字符串长度时,直接返回源字符串
                if(num>0&&num<b.length){
                        //根据现有的长度尝试截取字符串
                        String s= new String(b,0,num);
                        //获取新字符串最后一位的index
                        int len=s.length()-1;
                        //比较源字符串和新字符串最后一位的值是否相等
                        if(s.charAt(len)!=str.charAt(len)){
                                //如果不同则说明新子串的字节数组最后一个字节是一个汉字的半边,所以数组指针向左移一位
                                return new String(b,0,num-1);
                        }
                        return s;
                }

                return str;
        }

}

作者: asdsy222    时间: 2015-10-5 15:50
好的,已经收藏,非常棒
作者: 风语    时间: 2015-10-5 17:17
基础测试难吗?基本上是这种类型的题?
作者: xiaozhou001    时间: 2015-10-5 17:42
谢谢分享!!
作者: 江湖104    时间: 2015-10-5 17:48
已收藏,感谢楼主!
作者: 拂袖叙五代    时间: 2015-10-5 18:08
风语 发表于 2015-10-5 17:17
基础测试难吗?基本上是这种类型的题?

一份里有两三道这样的吧。
作者: 程序猿小哲    时间: 2015-10-5 18:13
以学习,谢谢楼主
作者: 前进……    时间: 2015-10-5 18:14
是入学考试题吗,还是什么题?
作者: 邬jerry    时间: 2015-10-5 19:17
谢谢楼主分享!!!
作者: 周建星    时间: 2015-10-5 20:19
谢谢分享  
作者: 只求不悔    时间: 2015-10-5 20:27
一入java深似海,从此节操是路人
作者: pan1564335    时间: 2015-10-5 20:56
厉害!如果基础测试题都是这么难得话,我就疯了
作者: 拂袖叙五代    时间: 2015-10-5 21:05
前进…… 发表于 2015-10-5 18:14
是入学考试题吗,还是什么题?

基础考试哦
作者: guaiqiaorener    时间: 2015-10-5 21:16
谢谢分享
作者: tianweidong    时间: 2015-10-5 21:38
学习中。。。。。。。。。。。
作者: silencea    时间: 2015-10-5 21:38
谢谢分享!!
作者: 斯文阿昊    时间: 2015-10-5 22:11
楼主好人,谢谢分享




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