substring(startIndex,endIndex)从startIndex start到endIndex-1的返回字符串是谁?

时间:2013-05-23 15:17:54

标签: java string

我有以下代码

public static void main(String args[]) throws Exception
{
    String mySite = "StackOverflow";
    System.out.println(mySite.substring(0, 4));
}

此图片为Stac 根据我的理解,索引从0开始。

S<-0
t<-1
a<-2
c<-3
k<-4

当我指定我需要从索引0到索引4的String时,我希望返回Stack但它返回Stac

当我查看 substring(int beginIndex,int endIndex)源代码时,它会说明以下内容。

 * @param      beginIndex   the beginning index, inclusive.
 * @param      endIndex     the ending index, exclusive.

有人可以解释在这种情况下包容性和排他性是什么意思吗?为什么它不直观?有没有人知道这种行为的具体原因?

4 个答案:

答案 0 :(得分:3)

  • 包含表示将包含该索引处的项目。
  • 独家表示该索引中的商品将包含在内。

除非你能在源代码中找到解释(可能)的评论,或找到并询问原作者(极不可能),否则只能猜测出真正的原因。

可以推断出原因是因为Java中的StringList等等(以及几乎所有其他语言)都是0索引的(从您的问题来看,您似乎是明白我会跳过解释,但是这些长度的值总是比最终索引的值多一个。还有许多其他例子和实例排除某种“子串”/“子列表”/等的最终索引。功能,因为这样可以很容易地获取字符串/列表/等的长度。并将其作为结束索引传递,然后始终假设它将被排除在子函数的底层实现中,无论其功能如何,以便用户不必总是记得放置-1或类似的偏移量,如果length用作结束索引。

所以,在你意识到0指数与长度的相互作用之后,它可以说是更直观的。

this duplicate question的公认答案中有一个很好的解释,它将C带入解释。

答案 1 :(得分:2)

包含表示该索引处的字符包含
独占表示该索引处的字符将排除

基本上,它将包含非常字符直到 - 但不包括 - endIndex

答案 2 :(得分:1)

包含=包含字符

独家=不包括字符

原因可能是历史惯例,但我不知道我的头脑。

答案 3 :(得分:0)

&#39;直观&#39;是在旁观者的眼中。

当你来写一些行为非常方便的代码时,你会发现。在构造子字符串时,您通常会在其中包含第一个内容的索引,并且:或者

  1. 所需的长度,endIndex只是startIndex+length
  2. 所需子字符串中不是的第一个字符的索引,例如分隔符,在这种情况下,它再次是endIndex的正确值。< / LI>

    第三种情况是当您拥有子字符串中最后一个所需字符的索引时,在这种情况下endIndex应设置为该值加1.但这只是三个案例中的一个(到目前为止) )。