论述题 10.  编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,例如“人ABC”4,应该截为“人AB”,输入“人ABC们DEF”,6,应该输出为“人ABC”而不是“人ABC+们的半个”。
【正确答案】在Java语言中,默认使用的Unicode编码方式,即每个字符占用两个字节,因此,可以用来存储中文。虽然String是由char所组成的,但是它采用了一种更加灵活的方式来存储,即英文占用一个字符,中文占用两个字符。采用这种存储方式的一个重要作用就是可以减少所需的存储空间,提高存储效率。根据这个特点,可以采用如下代码来完成题目的要求:
   public class Test
   {  //判断字符c是否是中文字符,如果是返回true
   public static boolean isChinese(char c)
   {
   String sb=String.valueOf(c);
   return sb.getBytes().length>1?true:false;
   }
   public String mmcateStr(String str,int len)
   {
   if(str==null || str.equals("") || len==0)
   return"";
   char[]chrArr=str.toCharArray();
   StringBuilder 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)
   {
   Test splitStr=new Test();
   String sb="人ABC们DEF";
   System.out.println(splitStr.truncateStr(sb,6));
   }
   }
   程序的运行结果为:
   人ABC
【答案解析】