测试代码如下:这个是用中文编码UTF-8
public class SubStringTest {
public static void main(String[] args) throws Exception {
String str = "aaa熊bbb123";
int m = trimGBK(str, 5);// 调用函数
String str2 = str.substring(0, m);
System.out.println(str2);
}
// 需要判断最后一个字节是不是中文的一半 ,如果是的,就只截取String到前面一个
public static int trimGBK(String str, int n) throws Exception {
// 转化为byte数组,里面好像是asc码(不确定)
byte[] bt = str.getBytes("UTF-8");// 如若这里是UTF-8,我们一个汉字就占了三个字节,
// byte[] bt = str.getBytes("GBK");//如若这里是GBK,我们一个汉字就占了两个字节,
System.out.println(bt.length);
int m = n;
if (bt[n - 1] < 0) {// 这里判断如果是小于0,就是汉族。
m = n - 2;// 如果是UTF-8就是-2
// m=n-1;//如果是GBK就是-1
}
return m;
}
}
控制台输出如下:
下边将编码修改为GBK:
public class SubStringTest {
public static void main(String[] args) throws Exception {
String str = "aaa熊bbb123";
int m = trimGBK(str, 5);// 调用函数
String str2 = str.substring(0, m);
System.out.println(str2);
}
// 需要判断最后一个字节是不是中文的一半 ,如果是的,就只截取String到前面一个
public static int trimGBK(String str, int n) throws Exception {
// 转化为byte数组,里面好像是asc码(不确定)
//byte[] bt = str.getBytes("UTF-8");// 如若这里是UTF-8,我们一个汉字就占了三个字节,
byte[] bt = str.getBytes("GBK");//如若这里是GBK,我们一个汉字就占了两个字节,
System.out.println(bt.length);
int m = n;
if (bt[n - 1] < 0) {// 这里判断如果是小于0,就是汉族。
//m = n - 2;// 如果是UTF-8就是-2
m=n-1;//如果是GBK就是-1
}
return m;
}
}
控制台输出如下: