以前都是写英文的系统,不用处理汉字,现在就碰到可能会截取汉字的情况,当然是要不能截取出乱码来,就是不能对整个汉字截取一半。如"我ABC汉字d"这个字符串,截取5个字节的时候,应该是"我ABC",而截取8个字节的时候,应该是"我ABC汉",而不应该是"我ABC汉?",其中"?"为半个汉字。
Java中的char类型是占两个字节的,因此一个char就可以存放一个中文字。程序实现起来也简单。
public class StringUtil{
public static String cut(String str, int bytesCount){
byte[] bytes = str.getBytes();
char[] chars = new String(bytes, 0, bytesCount).toCharArray();
char[] charsPlus = new String(bytes, 0, bytesCount + 1).toCharArray();
if (chars.length == charsPlus.length)
return new String(bytes, 0, bytesCount - 1);
return new String(bytes, 0, bytesCount);
}
public static void main(String[] args){
System.out.println(cut("我ABC汉字d", 8));
System.out.println(cut("我ABC汉字d", 7));
System.out.println(cut("我ABC汉字d", 6));
System.out.println(cut("我ABC汉字d", 5));
System.out.println(cut("我ABC汉字d", 4));
System.out.println(cut("我ABC汉字d", 3));
System.out.println(cut("我ABC汉字d", 2));
System.out.println(cut("我ABC汉字d", 1));
}
}