为什么java substring方法的工作原理如下?

时间:2016-03-25 02:07:49

标签: java string

这可能有一个非常明显的答案,但我刚开始学习Java并发现了这一点。

说我们有

String x = "apple";

为什么x.substring(5)返回"",空字符串x.substring(6)会引发IndexOutOfBounds异常?是否有某种空字符串可以被引用附加到每个字符串?只是不确定它是如何工作的。

谢谢!

3 个答案:

答案 0 :(得分:4)

Javadoc对public String substring(int beginIndex)说: “返回一个新字符串,它是该字符串的子字符串。子字符串从指定的beginIndex开始,并扩展到索引endIndex处的字符 - 1.因此子字符串的长度为endIndex-beginIndex。”

“apple”的长度为5,因此x.substring(5)的长度为5 - 5 == 0.

另一方面,api doc说如果 “... endIndex大于此String对象的长度......”您遇到的异常将被抛出。对于x.substring(6),您的endIndex为6,而String对象的长度为5.

你问的是“是否有某种空字符串可以被引用到每个字符串中?”。我会说是的,这在某种程度上是正确的:空字符串在任何字符串的任何位置都被“包含”,并且它可以附加到任何字符串而不更改它。但我不确定这种查看方式是否有帮助...

答案 1 :(得分:3)

Java子字符串接受值0variable.length(包括)。

给定的数字不是指字符的位置,而是指字符之间的点的位置。例如:

0 :a: 1 :p: 2 :p: 3 :l: 4 :e: 5

5返回一个空字符串,因为之后没有字符。

6会抛出异常,因为没有第六个位置。

答案 2 :(得分:-1)

这是子串的来源

public String substring(int beginIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    int subLen = value.length - beginIndex;    // if less than 0, throw Exception   
                            //the value.length is your String.length 
    if (subLen < 0) {
        throw new StringIndexOutOfBoundsException(subLen);
    }
    return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}

当你的beginIndex是biger时,那么value.length(String.length)这将是一个例外