【问题标题】:substring index range子串索引范围
【发布时间】:2011-06-01 23:39:57
【问题描述】:

代码:

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 处,但 char i 在 7 处,所以输出将是 ersi

【问题讨论】:

  • 另外,如果将开始索引设置为 str.length(),它不会抛出 IndexOutofBounds 异常。它只会返回一个空字符串。

标签: java string substring


【解决方案1】:

0: 上

1:n

2: 我

3: v

4: e

5: r

6: 秒

7: 我

8: t

9: 是的

起始索引包含在内

结束索引是排他的

Javadoc link

【讨论】:

  • 谢谢,这正是我发现的信息; beginIndex - 起始索引,包括在内。 endIndex - 结束索引,不包含。
  • 只要把它想象成一个以 0 为底的 char 数组,就像所有其他数组一样,第二个参数是 stop 位置而不是结束位置。
【解决方案2】:

两者都是从 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"

引用docs

子字符串从指定的位置开始 beginIndex 并扩展到 索引 endIndex - 1 处的字符。因此 子串的长度是 endIndex-beginIndex.

【讨论】:

    【解决方案3】:

    the javadoc。它是第一个参数的包含索引,第二个参数是独占索引。

    【讨论】:

      【解决方案4】:

      像你一样,我发现它不是自然而然的。我通常仍然需要提醒自己

      • 返回字符串的长度

        lastIndex - firstIndex

      • 您可以使用字符串的长度作为 lastIndex,即使那里没有字符并且尝试引用它会引发异常

      所以

      "University".substring(6, 10)
      

      即使位置 10 没有字符,也返回 4 个字符的字符串“sity"”。

      【讨论】:

        【解决方案5】:
        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 到最后一个索引。

        【讨论】:

          【解决方案6】:

          是的,索引从零 (0) 开始。这两个参数是 startIndex 和 endIndex,根据文档:

          子字符串从指定的 beginIndex 开始并延伸到索引 endIndex - 1 处的字符。

          更多信息请参见here

          【讨论】:

            【解决方案7】:

            子字符串从给定的第一个数字的位置开始并包含字符,然后转到,但不包括给定的最后一个数字的字符。

            【讨论】:

              【解决方案8】:

              对于 substring(startIndex, endIndex),startIndex 是包含的,endIndex 是排除的。 startIndex 和 endIndex 非常混乱。 我会理解 substring(startIndex, length) 记住这一点。

              【讨论】:

                【解决方案9】:
                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
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2010-10-31
                  • 2019-11-25
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-05-13
                  • 1970-01-01
                  相关资源
                  最近更新 更多