在
Java API方法中,如:
> String.substring(int beginIndex,int endIndex)
> String.subSequence(int beginIndex,int endIndex)
> List.subList(int fromIndex,int toIndex)
为什么开始索引包含但是末尾索引是独占的?为什么他们不应该被设计为包容性的?
解决方法
因为:
> Java是基于C,C是这样做的
>它使代码更清洁:如果要捕获到对象的结尾,则将object.length(但是对象实现此,例如size()等)转换为toIndex参数 – 不需要添加/减去1
例如:
String lastThree = str.substring(str.length() - 3,str.length());
这样,很明显代码中发生了什么(一件好事).
编辑一个像这样的C函数的例子是来自string.h的strncat:
char *strncat(char *dest,const char *src,size_t n);
size_t参数的值对应于java endPosition参数,因为它们都是对象的长度,但是如果它们是索引则从0开始计数,它将是超出对象结束的一个字节.