Java substring()无法按预期工作

时间:2014-06-06 22:19:29

标签: java

考虑Java中的以下代码:

String str = "a";
System.out.println("Length is :")+str.length(); //Prints "Length is :1"
System.out.println("Substring is :"+str.substring(1); //Prints "Substring is :"
System.out.println("Char at :")+str.charAt(1); //Throws IndexOutofbounds exception as expected

我的印象是substring()从指定的索引开始直到字符串的结尾。遵循此规则,上面的substring()函数不应该抛出arrayindexoutofbounds异常吗?为什么打印一个空字符串? charAt()函数按预期工作,即抛出异常。

2 个答案:

答案 0 :(得分:3)

实际上是正确的。根据String API:

  

IndexOutOfBoundsException - 如果beginIndex为负数或大于   这个String对象的长度。

如果你把它变成子串(2),你会看到异常。

答案 1 :(得分:1)

一切都很好,你没有仔细阅读javaDoc。

你只有一个字符串,所以索引只有0,长度是1.在javaDoc中,

如果符合以下情况,

subString()将抛出IndexOutOfBoundsException:

IndexOutOfBoundsException - if beginIndex is negative or larger than the length of this String object.

所以你的subString()调用不会抛出异常,因为长度为1,但返回空str。

charAt()charAt()调用时,会抛出ex:

IndexOutOfBoundsException  if the {@code index}
                  argument is negative or ***not less than*** the length of this
                  string.

这就是你得到前任的原因。