为什么java字符串函数getChars返回带有最后一个字符-1的字符串

时间:2014-09-13 08:21:30

标签: java string java-ee

你能用一些简单的英语单词给我一个解释:

  

getChars()和subSequence(int startindex,int endindex)

函数返回从startindex开始到endindex -1的子串。它的原因是什么。在C中有一个终止空字符,但它没有任何终止空字符。那么为什么java中的lastcharacter-1。在这个程序中我使用了子序列函数,输出应该是“glech”。但事实并非如此。输出是“glec”。为什么呢?

class simple
{
    public static void main(String args[])
    {
        String str="gigglecheguvera";
        System.out.println(str.subSequence(3,7));
    }
} 

2 个答案:

答案 0 :(得分:3)

startIndex开始的索引,endIndex停止的索引。所以,让我们来看看:

   +----------StartIndex
   |    +---- endIndex
   v    v
gigglecheguvera

这最终真的很有用。例如,如果要在空格和逗号之间找到文本:

String str = source.substring(source.indexOf(' '), source.indexOf(','));

这也意味着我们可以使用字符串的长度作为第二个参数,而不会越界。这对于您可能会或可能不会找到您的结束角色的情况非常方便:

int endIndex = source.indexOf(',');
String str = source.substring(source.indexOf(' '), endIndex == -1 ? source.length : endIndex);

答案 1 :(得分:1)

C中的空终止符不是原因。

起始索引是“包含边界”,结束索引是“独占边界”。这是一个常见的惯例。例如,请查看Arrays.copyOfRange。它做了同样的事情。

人们这样做是因为它通常更方便。例如,这是一个有用的结果:str.subSequence(a, b).length() == b - a

总是如此