interview----strChina

本文提供了一个实用的Java函数,用于安全地按字节截断包含中文的字符串,确保不会截断半个汉字,有效避免乱码问题。该函数通过检查字节值来判断是否为汉字,并相应调整截断位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值