为什么这两个子串调用等效?

Jer*_*phy 0 java substring

我正在用Java编写一个编码问题并且我的解决方案有效,但我看到其他人在他们的博客上发布的另一个解决方案有点短,但我不明白为什么它有效.

问题是:

给定非空字符串和int n,返回一个新字符串,其中索引n处的char已被删除.n的值将是原始字符串中char的有效索引(即n将在0..str.length()-1包括的范围内).

我的代码(适用于所有条件):

public String missingChar(String str, int n) {
    return str.substring(0,n) + str.substring(n+1,str.length());
}
Run Code Online (Sandbox Code Playgroud)

其他有效的代码是:

public String missingChar(String str, int n) {
    return str.substring(0, n) + str.substring(n + 1);
}
Run Code Online (Sandbox Code Playgroud)

区别在于第二行的末尾.
我的问题是为什么会str.substring(n+1)产生与之相同的结果str.substring(n+1,str.length())?

rya*_*ahn 5

substring()方法有两个变体:

public String substring(int beginIndex)

要么

public String substring(int beginIndex, int endIndex)

子字符串以指定的字符开头,beginIndex并延伸到此字符串的末尾,endIndex - 1如果给出第二个参数,则延伸到.