题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
分析:
众所周知使用GBK编码一个汉字占2个字节一个字字母占1个字节
但是在java中默认使用UTF-8编码所以一个汉字占3个字节,一个字母占1个字节
根据题意要求,一个汉字是按2个字节截取,所以我们需要将字符串更改为GBK编码
String str=new String("字符串".getByte("GBK"),"GBK");
防止汉字被截半个的情况,判断最后截取的字符串长度是否为偶数,
如果为偶数个,那么 就不存在汉字被截断半个的情况,
如果为奇数个,那么就可能存在汉字被截断半个的情况。
汉字编码,是采用两个字节,字节的第一个单元格为1,那么这两个字节都是负数,
所以只需要判断这个字节是否为负数,即可判断是否是中文。
if(leng%2==1&&b[leng-1]<0){
完整代码:
public static void main(String[] args) throws UnsupportedEncodingException {
int leng=5; //截取字符串长度
String str=new String("我ab实s".getBytes("GBK"),"gbk"); //默认字符串
byte[] b=str.getBytes("gbk");
if(leng%2==1&&b[leng-1]<0){
leng--;
}
for (int i = leng; i <b.length ; i++) {
b[i]=0;
}
System.out.println(new String(b,"GBK"));
}
输出:我ab