Java 为什么这两个子串调用是等价的?

Java 为什么这两个子串调用是等价的?,java,substring,Java,Substring,我正在用Java做一个编码问题,我的解决方案是可行的,但我看到其他人在他们的博客上发布了一个不同的解决方案,这个解决方案略短一些,但我不明白它为什么有效 问题是: 给定一个非空字符串和一个int n,返回一个新字符串,其中索引n处的字符已被删除。n的值将是原始字符串中字符的有效索引(即n将在0..str.length()-1范围内) 我的代码(适用于所有条件): 另一个同样有效的代码是: public String missingChar(String str, int n) { ret

我正在用Java做一个编码问题,我的解决方案是可行的,但我看到其他人在他们的博客上发布了一个不同的解决方案,这个解决方案略短一些,但我不明白它为什么有效

问题是:

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

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

另一个同样有效的代码是:

public String missingChar(String str, int n) {
    return str.substring(0, n) + str.substring(n + 1);
}
差别就在第二行的末尾。
我的问题是为什么
str.substring(n+1)
会产生与
str.substring(n+1,str.length())
相同的结果?

substring()方法有两种变体:

公共字符串子字符串(int-beginIndex)

公共字符串子字符串(int-beginIndex,int-endIndex)

子字符串以指定的
beginIndex
处的字符开始,并扩展到此字符串的结尾,或者如果给定第二个参数,则扩展到
endIndex-1

substring()方法有两个变体:

公共字符串子字符串(int-beginIndex)

公共字符串子字符串(int-beginIndex,int-endIndex)

子字符串以指定的
beginIndex
处的字符开头,并延伸到此字符串的结尾,或者如果给定了第二个参数,则延伸到
endIndex-1

当您键入:

str.substring(n + 1);
str.substring(n + 1, str.length());
这意味着它将把整个字符串从索引
n+1
返回到字符串的
末尾

当您键入时:

str.substring(n + 1);
str.substring(n + 1, str.length());
它的意思几乎是一样的。它将从索引返回整个字符串
n+1
str.length-1
,即直到字符串结束

请仔细阅读这些文件

键入时:

str.substring(n + 1);
str.substring(n + 1, str.length());
这意味着它将把整个字符串从索引
n+1
返回到字符串的
末尾

当您键入时:

str.substring(n + 1);
str.substring(n + 1, str.length());
它的意思几乎是一样的。它将从索引返回整个字符串
n+1
str.length-1
,即直到字符串结束

请仔细阅读这些文件


您真的读过javadoc吗?
子字符串
方法重载,因此您可以这样调用它@Jerry Murphy这并不奇怪,这是期望的行为。你真的读过javadoc吗?
substring
方法重载了,所以你可以这样调用它@杰瑞·墨菲这并不奇怪,这是人们想要的行为。