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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wayne7sk 中级黑马   /  2014-3-22 19:06  /  1052 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wayne7sk 于 2014-3-22 20:46 编辑
  1. public class Hm
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                  System.out.println(method("HM黑马",3));
  6.         }
  7.         
  8.         public static String method(String str,int a)
  9.         {
  10.                 String str1=null;
  11.                 if(str!=null)
  12.                 {
  13.                         byte[] by = str.getBytes();
  14.                         if(by.length <= a)
  15.                         {
  16.                                 str1 = str;
  17.                         }
  18.                         else
  19.                         {
  20.                                 if (a>0)
  21.                                 {
  22.                                         str1=new String(by,0,a);
  23.                                         int len = str1.length();
  24.                                         //此处,我理解为len=a+1,
  25.                                         //而在下面的代码中如果将len-1代替为a就会出现StringIndexOutOfBoundsException异常
  26.                                         //为什么用len-1就可以而a不可以呢?                        
  27.                                         if(str.charAt(len-1)!=str1.charAt(len-1))
  28.                                         {
  29.                                                 if (length<2)
  30.                                                 {
  31.                                                         str1=null;
  32.                                                 }
  33.                                                 else
  34.                                                 {
  35.                                                         str1= str1.substring(0, len-1);
  36.                                                 }
  37.                                                 
  38.                                         }
  39.                                        
  40.                                 }
  41.                                 
  42.                         }

  43.                 }
  44.                
  45.                 return str1;
  46.                
  47.                         
  48.         }
  49.                
  50. }
复制代码
问题在注解处。谢谢了

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

7 个回复

倒序浏览
29行 len<2
回复 使用道具 举报
str1.length()是计算str1字符串的长度,不是a+1
你可以去查一下API文档,里面有对String对象详细的方法介绍
回复 使用道具 举报
我刚才简单看了一下,下面是我的理解你看看是不是这个问题,new String(by , 0 , a)中得到的字符串是不是”HM黑“,因为英文是单字节存储,汉字是双字节存储的(在中国的编码表里面),从零到a  正好是四个字节所以是”HM黑“,那么跟你的理解就有偏差了

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
李猛 发表于 2014-3-22 19:57
我刚才简单看了一下,下面是我的理解你看看是不是这个问题,new String(by , 0 , a)中得到的字符串是不 ...

题目就是说你传字符串和字符数。比如输入3,截取3个字节,因为中文是2个字节所以想要截取3个字节就是要有半个中文,然后题目就是不要那半个中文,就输出HM,然后我的判断方法就是那截取后的第三个位置和原本字符串第三个位置的字符如果相等就说明最后截的是英文,如果不相等,最后一个截的就是中文,我想问的是27行那里的charAt后面是所在字符串的角标,参数是int,a也是int类型的,为什么就会报出StringIndexOutOfBoundsException异常,而且属于RuntimeException
回复 使用道具 举报
菜小徐 发表于 2014-3-22 19:11
str1.length()是计算str1字符串的长度,不是a+1
你可以去查一下API文档,里面有对String对象详细的方法介绍 ...

理解错了。。我发现 22行的 str1=new String(by,0,a);里面a是取不到的。。。
回复 使用道具 举报
菜小徐 发表于 2014-3-22 19:11
str1.length()是计算str1字符串的长度,不是a+1
你可以去查一下API文档,里面有对String对象详细的方法介绍 ...

查了api。。发现搞错了。。尴尬。。
回复 使用道具 举报
李猛 中级黑马 2014-3-22 21:24:52
8#
wayne7sk 发表于 2014-3-22 20:31
题目就是说你传字符串和字符数。比如输入3,截取3个字节,因为中文是2个字节所以想要截取3个字节就是要有 ...

我不说了吗,字符串长度为三,字符串角标是从零开始,你查找charAt(3),不就越界了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马