gpt4 book ai didi

java - 字符串子串索引可以是字符串的长度

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:33:34 25 4
gpt4 key购买 nike

这是一个 Java 字符串问题。我使用 substring(beginindex) 获取子字符串。考虑到 String s="hello",这个字符串的长度是 5。但是当我使用 s.substring(5)s.substring(5, 5)编译器没有给我报错。字符串的索引应该是从0到length-1。为什么它不适用于我的情况?我认为 s.substring(5) 应该给我一个错误,但它没有。

最佳答案

因为 endIndex是独占的,如 documentation 中指定.

IndexOutOfBoundsException - if the beginIndex is negative, or endIndex is larger than the length of this String object, or beginIndex is larger than endIndex.


I think when I use s.substring(5), it should give me error while it didn't

为什么会这样?

Returns a new string that is a substring of this string. The substring begins with the character at the specified index and extends to the end of this string.

beginIndex不大于 endIndex (在您的情况下为 5),这是完全有效的。您只会得到一个空字符串。

如果您查看 source code :

1915  public String substring(int beginIndex) {
1916 return substring(beginIndex, count);
1917 }
....
1941 public String substring(int beginIndex, int endIndex) {
1942 if (beginIndex < 0) {
1943 throw new StringIndexOutOfBoundsException(beginIndex);
1944 }
1945 if (endIndex > count) {
1946 throw new StringIndexOutOfBoundsException(endIndex);
1947 }
1948 if (beginIndex > endIndex) {
1949 throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
1950 }
1951 return ((beginIndex == 0) && (endIndex == count)) ? this :
1952 new String(offset + beginIndex, endIndex - beginIndex, value);
1953 }

因此 s.substring(5);相当于s.substring(5, s.length());这是s.substring(5,5);在你的情况下。

当您调用 s.substring(5,5); 时,它返回一个空字符串,因为您使用 count 调用构造函数(私有(private)包)值为 0(count 表示字符串中的字符数):

644 String(int offset, int count, char value[]) {
645 this.value = value;
646 this.offset = offset;
647 this.count = count;
648 }

关于java - 字符串子串索引可以是字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22730316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com