写一个函数,2 个参数,1 个字符串,1 个字节数,返回截取的字符串。
要求字符串中的中文不能出现乱码:如split("我ABC", 4);
应该截为我AB
,输入split("我ABC汉DEF", 6);
应该输出为我ABC
而不是我ABC+汉的半个
。
参考解答
private static void split(String str, int c) {
byte[] b;
int count = 0;
try {
// gbk是两个字节,首个字节是负数
b = str.getBytes("gbk");
boolean foundCN = false;
for (int i = 0; i < b.length; i++) {
// 检查出来是汉字,进入下一轮
if (!foundCN && b[i] < 0) {
foundCN = true;
continue;
}
// 是汉字,如果没超过截取长度,有效字节数+2,否则退出
if (foundCN) {
if (count + 2 > c) {
break;
}
count += 2;
foundCN = false;
continue;
}
// 是英文,超出长度,退出
if (count == c) {
break;
}
count++;
}
// 根据有效字节数,创建截取后字符串
byte[] b2 = new byte[count];
System.arraycopy(b, 0, b2, 0, count);
System.out.println(new String(b2, "gbk"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
测试:
split("我ABC", 4); // 输出 我AB
split("我ABC汉DEF", 6); // 输出 我ABC
split("一二三", 6); // 输出 一二三