为什么substring()不会给出错误,但charAt()会给出错误

时间:2013-06-10 14:49:58

标签: substring

String str = "Nobody ever went broke by buying IBM";

System.out.println("Length of this string: "+ str.length());
System.out.println("The character at position 36: "+ str.charAt(36)); // i get error here
System.out.println("The substring from 36: "+ str.substring(36));// why no error here

我输出如下:

Length of this string: 36
The character at position 36: error
The substring from 36: 

我的问题是为什么在调用substring(36)时它没有显示错误,而是我得到的答案是空格。从逻辑上讲,索引36没有字符?但是当我打电话给charAt(36)时我得到错误,因为没有36索引?

1 个答案:

答案 0 :(得分:2)

这就是这些功能应该如何工作的方式。 (假设java)。

来自oracle documentation

substring方法抛出IndexOutOfBoundsException - 如果beginIndex为负或大于此String对象的长度。

36是字符串的长度,它不大于字符串的长度,因此调用substring成功。

charAt失败,因为36个字符位于索引0到35之间。查看charAt的文档