将substring()的endIndex减1的原因

sia*_*ooo 5 java arrays string

可能重复:
为什么索引是包容性的但是结束索引是独占的?

substring() method => String substring(int beginIndex, int endIndex)

描述:

返回一个新字符串,该字符串是此字符串的子字符串.第一个整数参数指定第一个字符的索引.第二个整数参数是最后一个字符的索引 - 1.

看看下面的代码:

String anotherPalindrome = "Niagara. O roar again!"; 
String roar = anotherPalindrome.substring(11, 15); 
Run Code Online (Sandbox Code Playgroud)

输出: roar

现在,如果JVM没有减去int endIndex一个,我们可以只使用它substring(11,14),那不是更方便,更不容易出错(人性化的一面)吗?如果你没有仔细阅读说明,当你认为这endIndex只是正常的指数时,你可能只是半个小时(就像我做的那样)挠头.Java语言创建者将其减去一个的原因是什么?

Tom*_*icz 7

它有几个优点:

s.substring(0, s.length())
Run Code Online (Sandbox Code Playgroud)

总是正确的.也:

s.substring(i, j)
Run Code Online (Sandbox Code Playgroud)

结果字符串的大小始终为j - i.更具体地说,s.substring(0, j)将始终返回j字符.最后这意味着如果你想n在索引后取字符,i你只需说:

s.substring(i, i + n)
Run Code Online (Sandbox Code Playgroud)

提取字符串的后缀(最后n字符)也更容易:

s.substring(s.length() - n, s.length())
Run Code Online (Sandbox Code Playgroud)

例如,提取文件扩展名:

s.substring(s.indexOf('.') + 1, s.length())
Run Code Online (Sandbox Code Playgroud)