题目:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,例如“人ABC”4,应该截为“人AB”,输入“人ABC们DEF”,6,应该输出为“人ABC”而不是“人ABC+们的半个”。
解析:
在Java语言中,默认使用Unicode编码方式,即每个字符占用两个字节,因此,可以用来存储中文。虽然String是由char所组成的,但是它采用了一种更加灵活的方式来存储,即英文占用一个字符,中文占用两个字符,采用这种存储方式的一个重要作用就是可以减少所需的存储空间,提高存储效率。根据这个特点,可以采用如下代码来完成题目的要求:
public class Test {
public static boolean isChinese(char c) {
String s = String.valueOf(c);
return s.getBytes().length>1?true:false;
}
public String truncateStr(String str,int len){
if (str==null||str.equals("")|len==0){
return "";
}
char[] charArray = str.toCharArray();
StringBuffer stringBuffer = new StringBuffer("");
int count=0;//记录当前截取字符的长度
for (char cc:charArray){
if (count<len){
if (isChinese(cc)){
if (count+1==len){
return stringBuffer.toString();
}
count=count+2;
stringBuffer=stringBuffer.append(cc);
}else {
count=count+1;
stringBuffer=stringBuffer.append(cc);
}
}else {
break;
}
}
return stringBuffer.toString();
}
public static void main(String[] args) {
Test test = new Test();
String s = "人ABC们DEF";
System.out.println("test.truncateStr(s,6) = " + test.truncateStr(s,6));
}
}