子字符串索引范围

77

代码:

public class Test {
    public static void main(String[] args) {
        String str = "University";
        System.out.println(str.substring(4, 7));
    }   
}

输出:ers

我不太理解 substring 方法的工作方式。索引是否从 0 开始?如果从 0 开始,e 的索引为 4,但字符 i 的索引为 7,那么输出将是 ersi


另外,如果您将起始索引设置为str.length(),它不会抛出IndexOutofBounds异常。它只会返回一个空字符串。 - आनंद
9个回答

147

0:U

1:n

2:i

3:v

4:e

5:r

6:s

7:i

8:t

9:y

起始索引包含在内

结束索引不包含在内

Javadoc链接


2
谢谢,这正是我发现的有用信息;beginIndex - 开始索引(包括)。endIndex - 结束索引(排除)。 - DarkLeafyGreen
把它看作一个字符数组,基础为0,和其他数组一样,第二个参数是“停止”位置而不是结束位置。 - Henrik Erlandsson

14

两者都是基于0的,但起始位置是包含的,结束位置是不包含的。这确保了结果字符串的长度为start - end

为了使substring操作更加容易,可以想象字符位于索引之间。

0 1 2 3 4 5 6 7 8 9 10  <- available indexes for substring 
 u n i v E R S i t y
        ↑     ↑
      start  end --> range of "E R S"

引用文档

子字符串从指定的beginIndex开始,并延伸到索引endIndex - 1处的字符。因此,子字符串的长度为endIndex-beginIndex


8
请参见Java文档。对于第一个参数是包含的索引,而第二个参数是不包含的。

4

像你一样,我也没有觉得这是自然而然的。我通常还需要提醒自己:

  • 返回字符串的长度

    lastIndex - firstIndex

  • 即使在该位置没有字符并且尝试引用它会抛出异常,您仍可以使用字符串的长度作为 lastIndex

所以

"University".substring(6, 10)

即使第10个字符为空,也会返回4个字符的字符串“sity”。


3
public String substring(int beginIndex, int endIndex)

beginIndex——起始索引,包含在内。

endIndex——结束索引,不包含在内。

示例:

public class Test {

    public static void main(String args[]) {
        String Str = new String("Hello World");

        System.out.println(Str.substring(3, 8));
    }
 }

输出:"lo Wo"

从第3个到第7个索引。

还有另一种substring()方法:

public String substring(int beginIndex)

beginIndex表示开始索引,包括该索引位置的字符。 返回从beginIndex到主字符串末尾的子字符串。

示例:

public class Test {

    public static void main(String args[]) {
        String Str = new String("Hello World");

        System.out.println(Str.substring(3));
    }
}

输出:"lo World"

从第3个索引到最后一个索引。


2
是的,索引从零(0)开始。两个参数是startIndex和endIndex,根据文档:
引用: 子字符串从指定的beginIndex开始,并延伸到index endIndex-1处的字符。
有关更多信息,请参见此处

1

子字符串从第一个给定数字的位置开始(包括该字符),并以最后一个给定数字所在位置结束(但不包括该字符)。


0
public class SubstringExample
{
    public static void main(String[] args) 
    {
        String str="OOPs is a programming paradigm...";

        System.out.println(" Length is: " + str.length());

        System.out.println(" Substring is: " + str.substring(10, 30));
    }
}

输出:

length is: 31

Substring is: programming paradigm

0

对于substring(startIndex, endIndex)方法,startIndex是包含在内的,而endIndex则不包含。这两个参数经常会让人感到困惑。 我建议使用substring(startIndex, length)方法来更好地理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接