[code]
1、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
public static void main(String[] args)throws Exception {
String str = "我爱中华";
int num = trimGBK(str.getBytes(),5);
System.out.println(str.substring(0,num )); //substring是说字符,而不是字节长度
}
public static int trimGBK(byte[] buf,int n){
int num = 0; //代表字符数量
boolean isFirst = true;
for(int i=0;i<n;i++)
{
if(buf[i]<0 ){ //buf[i]<0说明这个里面放的是中文,所以需要两次小于0才能++
if(!isFirst){ //第一次进入就意味着这是半个字节,那么num不加
num +=1; //如果两个中文字节,那么字符加1
}
isFirst = !isFirst;
}else{
num++;
}
}
return num;
}
[/code]
1、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
public static void main(String[] args)throws Exception {
String str = "我爱中华";
int num = trimGBK(str.getBytes(),5);
System.out.println(str.substring(0,num )); //substring是说字符,而不是字节长度
}
public static int trimGBK(byte[] buf,int n){
int num = 0; //代表字符数量
boolean isFirst = true;
for(int i=0;i<n;i++)
{
if(buf[i]<0 ){ //buf[i]<0说明这个里面放的是中文,所以需要两次小于0才能++
if(!isFirst){ //第一次进入就意味着这是半个字节,那么num不加
num +=1; //如果两个中文字节,那么字符加1
}
isFirst = !isFirst;
}else{
num++;
}
}
return num;
}
[/code]