A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马不黑 中级黑马   /  2013-12-4 22:16  /  1040 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马不黑 于 2013-12-5 08:32 编辑

题目:从“HM程序员训练营”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文。为什么设置不同的截取长度,结果中的字符串末尾会出现“?”
我的代码实现如下:
  1. public static void byteSubStr(String str , int len)
  2. {
  3. String s = null; //初始化字符串s,赋值为空
  4. if(str != null) //传入的字符串不能为空
  5. {
  6. byte[] a = null; //初始化字节数组,赋值为空
  7. try
  8. {
  9. a = str.getBytes("GBK"); //将字符串转化为字节数组,GBK码表,此时字节数组的长度为14
  10. }
  11. catch (UnsupportedEncodingException e) //捕捉编码失败异常
  12. {
  13. e.printStackTrace();
  14. }
  15. //System.out.println("String length:"+a.length);打印字节数组的长度
  16. if(a.length <= len)
  17. {
  18. s = str; //如果要求取出的字节长度大于字节数组应有长度,则将s初始化为str
  19. }
  20. else if(len > 0)
  21. {
  22. s = new String(a, 0, len); //如果字节长度在字节数组长度范围内,则根据要求取出长度len,创建新的字符串s。
  23. int length = s.length(); //获取新字符串的长度
  24. //System.out.println(s.length());
  25. if(str.charAt(length - 1) != s.charAt(length-1))//如果原字符串中相应位置上的字符与
  26. //新字符串相应位置上的字符不相等,说明新字符串中相应位置只有半个中文,则应该讲数组指针向左移一位,形成新的子串。
  27. {
  28. if(length < 2)
  29. {
  30. s = null; //如果新字符串的长度小于2,则将新字符串赋值为空。
  31. }

  32. else
  33. {
  34. s = s.substring(0, length - 1); //将符合条件的子串复制给s
  35. }
  36. }
  37. }
  38. }
  39. System.out.println(s);
  40. }
复制代码

评分

参与人数 1黑马币 +3 收起 理由
简★零度 + 3

查看全部评分

1 个回复

倒序浏览
给你参考下我写的:
  1. public static String cutString(String str, int len) {
  2.                
  3.         //定义一个子串,用于存储最后结果。
  4.         String substr = null;       
  5.        
  6.         if(str != null) {
  7.                 byte[] by = null;
  8.                 //使用GBK码表将源字符串编码成byte序列,并存储到数组by中。需要捕捉异常
  9.                 try {
  10.                         by = str.getBytes("GBK");
  11.                 } catch (UnsupportedEncodingException e) {
  12.                         e.printStackTrace();
  13.                 }
  14.                
  15.                 //如果需要截取的字节数大于等于源字符串的字节数,直接返回整个源字符串
  16.                 if(len >= by.length)
  17.                         return str;
  18.                
  19.                 //按需要截取的字节数截取一段字符串
  20.                 substr = new String(by, 0, len);
  21.                
  22.                 //如果该字符串不是源字符串的子串,说明出现了半个中文的情况,舍弃最后一个字节
  23.                 if(!str.contains(substr))
  24.                         substr = new String(by, 0, len-1);
  25.         }
  26.         return substr;
  27. }
复制代码



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马