1
public class StringDemo{

   public static void main(String[] args) {

       String str = "this:";
       int a = str.indexOf(":"); // returns 4
       String subStr = str.substring(a+1); // returns "" <empty string>
       String subStr = str.substring(a+2); // throws exception
      int charAt = str.charAt(a+1); // Throws an StringIndexOutOfBoundsExp.
    }
}

任何人都可以解释为什么它返回“”以及为什么它会引发异常

4

4 回答 4

3
str.substring(a+1)

返回给定索引 ( )之后a+1的字符串,即冒号之后的字符串,它是一个空字符串。

str.charAt(a+1)

访问冒号后面不存在的位置的数组值。

于 2013-05-06T12:04:30.653 回答
1

str.substring(a+1)str从STARTINGa+1或处返回一个子字符串5。您的字符串在索引处没有任何内容,5因此它将返回一个空字符串。

于 2013-05-06T12:04:20.627 回答
0

我想先回答为什么结果是空字符串。

方法:子字符串(int beginIndex)

就像说

substring(beginIndex,String.length());

您的参数上指定的 endIndex 是 5,长度也是 5。因此,如果您执行 substring(0,0) 或 substring(1,1) 或 substring(5,5),它将始终给出一个空字符串,因为 begin 和end 索引相等。用简单的语言来说,相同的开始和结束索引不占用任何内容,因此导致空字符串。

为什么整数 5 仍然是有效索引?答案在于 Java API 本身:抛出:IndexOutOfBoundsException - 如果 beginIndex 为负数或大于此 String 对象的长度。

参考:

Java API
String substring() 方法示例

于 2013-08-25T05:12:29.227 回答
0

No it won't throw IndexOutOfBoundException instead it will return empty String. Same is the case when beginIndex and endIndex is equal, in case of second method. It will only throw StringIndexBoundException when beginIndex is negative, larger than endIndex or larger than length of String.

String subStr = str.substring(a+1); // returns "" . // Because there is Nothing at that place

Its clearly there in the API

"emptiness".substring(9) returns "" (an empty string)

Read more: http://javarevisited.blogspot.com/2011/10/how-substring-in-java-works.html#ixzz2SVu5lyYo

where as CharAt throws Throws: IndexOutOfBoundsException - if the index argument is negative or not less than the length of this string

于 2013-05-06T12:06:12.690 回答