编写一个截取字符串的函数,输入一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截取半个,例如"人ABC"4,应该截为:"人AB",输入"人ABC们DEF",6,应该输出为“人ABC”而不是"人ABC+们的半个"
在Java语言中,默认使用Unicode编码方式,即每个字符占用2个字节,因此可以用来存储中文。虽然String 是由char所组成的,但是它采取了一种更加灵活地方式进行存储,即英文占一个字符,中文占2个字符。根据这个特点,可以完成题目所示的代码要求:
`public class Test1 { // 判断字符c是否是中文字符,如果是则返回true public static boolean isChinese(char c){ String sb=String.valueOf(c); return sb.getBytes().length>1?true:false; }
public String truncateStr(String str,int len){
if(str==null||str.equals("")||len==0){
return "";
char[] chrArr;
chrArr=str.toCharArray();
StringBuilder sb;
sb = new StringBuilder("");
// 用来记录当前截取字符串的长度 int count=0; for(char cc:chrArr){ if(count<len){ if(isChinese(cc)){ // 如果要求截取的子串长度只差了一个字符,但是接下来的字符是中文,则截取结果子串中不保存这个中文字符 if(count+1==len){ return sb.toString(); } count=count+2; sb=sb.append(cc); }else{ count=count+1; sb=sb.append(cc); } }else{ break; } } return sb.toString(); } }
public static void main(String[] args) {
Test1 splitStr=new Test1();
String sb="人ABC们DEF";
System.out.println(splitStr.truncateStr(sb,6));
}
}`