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

时间:2014-10-07 15:27:32

标签: 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());
}

其他有效的代码是:

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())相同的结果?

2 个答案:

答案 0 :(得分:5)

substring()方法有两个变体:

public String substring(int beginIndex)

public String substring(int beginIndex, int endIndex)

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

答案 1 :(得分:0)

键入时:

str.substring(n + 1);

这意味着它会将整个字符串从索引n + 1返回到end of the string

当你输入:

str.substring(n + 1, str.length());

它几乎意味着同样的事情。它将从索引
返回整个字符串 n + 1str.length - 1,即直到字符串结束。

请仔细阅读文档。

Substring docs