从一个包含汉字和其他字符的字符串中截取指定字节长度的字符串,不可以出现中文乱码

最近整理之前自己学习Java时的一些代码笔记,可能都是一些比较基础的Java知识,在这里只是给需要的人参考一下。

要求描述:从一个包含汉字和其他字符的字符串中截取指定字节长度的字符串,不可以出现中文乱码,举个例子:

现有字符串:"我不道你xia我gsm是hai你shi那个地方那条街"

  现在要求截取12个字节:如果直接截取12个字节就会出现中文乱码,所以按照我们的要求只能截取前11个字节,也即是:我不道你xia

如果要求截取13字节的话,就可以直接截取,最后结果为:我不道你xia我

package interview;

import java.io.IOException;

public class CutStringByConstantByte {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		String str = "我不道你xia我gsm是hai你shi那个地方那条街";
		System.out.println(CutStringMethod(str.getBytes("GBK"),12)); 
	}

	public static String CutStringMethod(byte[] bs,int count) {
		// TODO Auto-generated method stub
		int countNum = 0;
		int cutNum = 0;
		//汉字的2个字节的ASCII码都大于128,统计要截取的字节中汉字字节的数目
		for (int i = 0; i < count;i++) {
			if(bs[i]<0){  //判断是否为汉字
				countNum++;
			}
		}
		/*一个汉字是由两个字节组成的*/
		if(countNum%2==0){ //如果汉字的字节数为偶数时,则截取的字节数不变
			cutNum = count;
		}else{   //如果汉字的字节数为奇数时,则截取的字节数要少一个
			cutNum = count-1;
		}
		
		return new String(bs, 0, cutNum);
		
	}

}

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值