题目:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如输入“我ABC”应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
答案:
public class Test {
public static void main(String[] args) {
// 测试数据
String a = split("我ABC", 5);
System.out.println(a);
String b = split("我ABC汉DEF", 6);
System.out.println(b);
}
/**
* 截取字符串的函数
* @param str 需要截取的字符串
* @param byteNum 可以截取的字节数
* @return
*/
public static String split(String str, int byteNum) {
// 存储截取出来的字符
StringBuilder sb = new StringBuilder();
// byteNum大于0,说明还可以截取
for (int i = 0; i < str.length() && byteNum > 0; i++) {
// 获取被截取的字符
char ch = str.charAt(i);
if (String.valueOf(ch).getBytes().length == 3 && byteNum >= 3) {
// 大家都知道,我们现在用的是UTF-8环境,所以一个汉字是3个字节
// 如果被截取的字符是汉字,并且剩余字节数大于等于3,我们才能截取
sb.append(ch);
byteNum -= 3;
} else if (String.valueOf(ch).getBytes().length == 3 && byteNum < 3) {
// 如果截取的数字是汉字,但是属于字节数不足三个,那不能在截取了,这也是题目的要求,我的操作相当于退出for循环
byteNum = 0;
} else {
// 如果不是汉字,那直接截取就可以了
sb.append(ch);
byteNum--;
}
}
return sb.toString();
}
}
结果:
我AB
我ABC