考虑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()
函数按预期工作,即抛出异常。
答案 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.
这就是你得到前任的原因。