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,只能说明这个是中文的一部分,但是必须判断这个事中文的前半截还是后半截。
如果是前半截,那么直接不要了,如果是后半截,这必须放入结果集,否则结果集就会乱码。当然也可以将结果集中的最后一个字节去掉。
浙公网安备 33010602011771号