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

最近整理之前自己学习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);
		
	}

}


猜你喜欢

转载自blog.csdn.net/shallynever/article/details/52072377