黑马程序员技术交流社区

标题: 切割带汉字的字符串疑惑 [打印本页]

作者: 全超    时间: 2013-3-19 15:23
标题: 切割带汉字的字符串疑惑
本帖最后由 全超 于 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);
        }
}

作者: VOIDMAIN    时间: 2013-3-19 16:16
本帖最后由 VOIDMAIN 于 2013-3-19 16:36 编辑

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

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

作者: 全超    时间: 2013-3-19 16:36
VOIDMAIN 发表于 2013-3-19 16:16
byte[] arr = str.getBytes();你遍历一下这个arr数组,就知道了字符串转为字节数组的时候,会有很多负数, ...

懂了。。谢谢指教。。




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