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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

lavenderlmm

中级黑马

  • 黑马币:-7

  • 帖子:34

  • 精华:0

今天在做一道题目:将"hello java"每个单词的首字母转换成大写其余还是小写字母(不许直接输出Hello  Word 要用代码实现)时,同桌突然突然问我为何他的代码中抛出了异常:
他的代码如下:
public class Shuchudaxie {
    public static void main(String[] args) {
        String str = "aa  aaaaaa"; //中间是两个空格
        String[] newstr = str.split(" ");//用一个空格进行拆分

        String str2 = "";
        for (int i = 0; i < newstr.length; i++) {   
              str2 += (newstr.substring(0,1).toUpperCase()+ newstr.substring(1,newstr.length())+" ");

         }   
    }
}
运行后结果如下:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.substring(String.java:1907)
at com.lmm.A1.Shuchudaxie.main(Shuchudaxie.java:10)

经过我仔细分析,终于发现了原因:
原来在进行字符串拆分时,newstr数组长度一共为3,数组元素分别为aa, "", aaaaaa. 当for循环遍历到索引1的空字符串元素时,
newstr[1]的实际长度为0,但是因为调用了newstr.substring(0,1).,所以在此处抛出了异常。我通过查看java底层代码发现,substrinf()方法源代码中有以下这种情况。
if (endIndex > value.length) {  //value.length为字符串实际长度在本题中为0,endIndex为用户定义的要截取的最大索引,本题中为1
            throw new StringIndexOutOfBoundsException(endIndex);
}

所以抛出了索引越界









0 个回复

您需要登录后才可以回帖 登录 | 加入黑马