java实现中英文混合长度截取

说明1:

  在java编程中有很多的编码格式,例如UTF-8,Unicode,GBK等,经过几次测试发现只有GBK是严格区分中英文的。

  在UTF-8中,英文字符的字节数组有的是2个长度有的是一个,中文则是3个或者4个,

  在unicode中则是全部都是4个长度。

  在GBK中英文的字节长度一律是1个长度,中文的字节长度则是2个(所以可以很好的区分)

说明2:String str = "abc";  str.length(),这个是获取字符串字符(无论中英文都是一个)长度,而不是字节长度。

源码如下:

    public static void main(String[] args) throws UnsupportedEncodingException {
        String content = "a>s》a?d“\"s撒]打算sdsd啊实打实辅导费";
        byte [] contentByte = content.getBytes("GBK");
        int maxLen = 20;
        byte [] result = new byte[maxLen+1];
        for (int i=0;i<contentByte.length;i++) {
            //长度不能超过8:
            if(i==maxLen){
                //判断当前是中文还是英文
                if(contentByte[i]>0 || contentByte[i-1]<0){
                    result[i] = contentByte[i];
                }
                break;
            }
            result[i] = contentByte[i];
        }
        System.out.println(new String(result,"GBK"));
    }

输出:a>s》a?d“"s撒]打算s

思路说明:

  主要是对最后一个的判断,如何最后一个字小于0,只能说明这个是中文的一部分,但是必须判断这个事中文的前半截还是后半截。

如果是前半截,那么直接不要了,如果是后半截,这必须放入结果集,否则结果集就会乱码。当然也可以将结果集中的最后一个字节去掉。

posted on 2014-06-01 16:31  把-大象装进-冰箱  阅读(813)  评论(0)    收藏  举报