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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 全超 中级黑马   /  2013-3-19 15:23  /  1205 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 全超 于 2013-3-19 16:37 编辑

class  CutDemo
{
        public static void main(String[] args)
        {
                String s = cutString("ab23c嘿嘿acac哈哈",8);//输入字符串 和要获取的字节数
                System.out.println(s);
        }        
        public static String cutString(String str,int len)
        {
                byte[] arr = str.getBytes();
                int count = 0;
                for(int x = len-1; x>=0; x--)
                {
                        if(arr[x]<0)//知道一个汉字占两个字节,这一步判断是不是负数不太理解?
                        {
                                count++;
                        }
                        else
                                break;
                }

                if(count%2==0)
                        return new String(arr,0,len);
                else
                        return new String(arr,0,len-1);
        }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 VOIDMAIN 于 2013-3-19 16:36 编辑

byte[] arr = str.getBytes();你遍历一下这个arr数组,就知道了字符串转为字节数组的时候,会有很多负数,这个负数就是汉字的字节内容,因为ASSIC编码只有一个字节,汉字占用两个字节,最高位为1,也就是负数,而且为了区分字母,所以每当遇到汉字的时候就会以两个字节的负数表示,

切割汉字我有个方法供参考;
                                       String chinese = "[\u4e00-\u9fa5]"; //汉字的正则表达式
                                       if (st.matches(chinese))  //和自己定义的字符数组进行比较,是汉字的话在利用substring方法切割的时候就多或者少取一个字节(保全汉字);

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
VOIDMAIN 发表于 2013-3-19 16:16
byte[] arr = str.getBytes();你遍历一下这个arr数组,就知道了字符串转为字节数组的时候,会有很多负数, ...

懂了。。谢谢指教。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马