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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 拂袖叙五代 中级黑马   /  2015-10-5 15:30  /  658 人查看  /  16 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

刚做了基础测试,发现下面的题目挺绕的,自己写了一个方法,给大家参考。

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;
        }

}

16 个回复

倒序浏览
好的,已经收藏,非常棒
回复 使用道具 举报
基础测试难吗?基本上是这种类型的题?
回复 使用道具 举报
谢谢分享!!
回复 使用道具 举报
江湖104 来自手机 中级黑马 2015-10-5 17:48:22
报纸
已收藏,感谢楼主!
回复 使用道具 举报
风语 发表于 2015-10-5 17:17
基础测试难吗?基本上是这种类型的题?

一份里有两三道这样的吧。
回复 使用道具 举报
以学习,谢谢楼主
回复 使用道具 举报
是入学考试题吗,还是什么题?
回复 使用道具 举报
谢谢楼主分享!!!
回复 使用道具 举报
谢谢分享  
回复 使用道具 举报
只求不悔 来自手机 中级黑马 2015-10-5 20:27:15
11#
一入java深似海,从此节操是路人
回复 使用道具 举报
厉害!如果基础测试题都是这么难得话,我就疯了
回复 使用道具 举报
前进…… 发表于 2015-10-5 18:14
是入学考试题吗,还是什么题?

基础考试哦
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
学习中。。。。。。。。。。。
回复 使用道具 举报
谢谢分享!!
回复 使用道具 举报
楼主好人,谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马