【问题标题】:Java substring endindex-1Java 子字符串 endindex-1
【发布时间】:2015-02-03 20:35:09
【问题描述】:

我在一个项目中使用了substring,之前我使用了endindex 位置,它没有产生预期的结果,后来我知道java substringendindex-1。我发现它没有用。那么为什么 Java 使用 endindex-1 而不是普通的 endindex 呢?

我的代码如下。

String str = "0123456789";
String parameter1 = str.substring(0,4);
String parameter2 = str.substring(5,8);`

【问题讨论】:

标签: java string substring


【解决方案1】:

它有很多优点,尤其是s.substring(a,b) 的长度为b-a

也许更有用的是

s.substring(0,n)

结果与

相同
s.substring(0,k) + s.substring(k,n)

【讨论】:

    【解决方案2】:

    javadoc 通过这种方式解释了原因

    endIndex-beginIndex = 子串的长度

    因此参数定义为

    beginIndex - 起始索引,包括。 endIndex - 结束索引,不包含。

    一个用例是当你做类似的事情时

    int index = 3;
    int length = 2;
    str.substring(index,index+length); 
    

    当以独占方式使用 endIndex 时,以编程方式做事会更容易

    【讨论】:

      【解决方案3】:

      Java 总是使用 begin 参数作为包含性参数和 end 参数作为排除性参数来确定范围。

      [0:3[ <=> 0, 1, 2
      [4:6[ <=> 4, 5
      

      你会在 java 的 API 中多次发现这种行为: 列表, 细绳, ...

      它是多年前在 java 规范中定义的。 恕我直言,这很棒而且非常有用。 所以有了这个定义,你就可以做到这一点。

      String x = "hello world";
      String y = x.substring(0, x.length() - 6); // 6 = number of chars for "world" + one space.
      StringBuilder builder = new StringBuilder(y);
      builder.append(x.subSequence(5, x.length())); // 5 is index of the space cause java index always starts with 0.
      System.out.println(builder.toString());
      

      否则你总是需要计算才能得到一个字符串的最后一个真正的字符。

      【讨论】:

        猜你喜欢
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        • 2021-11-23
        • 2011-03-15
        • 2016-03-10
        • 2015-10-04
        • 2015-11-11
        • 2017-01-04
        相关资源
        最近更新 更多