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

来源:互联网 发布:数据分析师 挂靠 编辑:程序博客网 时间:2024/05/21 11:07

最近整理之前自己学习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 stubString 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 stubint 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 0
原创粉丝点击