java - String 类中的 Substring 方法达到了它不应该达到的索引

标签 java string indexing substring

<分区>

如果标题不清楚,我深表歉意。

现在,在字符串中索引从 0 开始。例如:

Index    0   1   2   3   4
String   H   E   L   L   O

在这种情况下,最后一个索引是 4。

如果我尝试做这样的事情:

System.out.println("hello".charAt(5));

它会抛出“索引越界异常”,这是应该的。

但是,如果我尝试运行以下代码:

System.out.println("hello".substring(5));

它确实运行了!我写了类似的代码,后来注意到了这一点,但无法弄明白。

最终,问题是我们怎么可能达到我们不应该达到的指数?它允许我们写:

stringObj.substring(stringObj.length());

它看起来不太安全,因为 stringObj.length() 返回一个比最后一个索引多 1 的整数。

它是故意制作的吗?这是有目的的吗?如果是这样,这个目的是什么,它带来的好处是什么?

最佳答案

使用 substring 更容易当你想到这样的索引时(比如字母在 索引之间)

         H E L L O
        0 1 2 3 4 5    <- acceptable range of indexes for "HELLO"
        ^         ^
        |         |
      start      end = length
   (min index) (max index)

当您从 start 中提取子字符串时至 end你只能得到这些索引之间的字符。

所以在 "HELLO".substring(2,4) 的情况下你会得到一部分

 L L 
2 3 4

返回 "LL" .

现在如果是substring(5)它的作用与 substring(5,length) 相同这意味着在这种情况下它是 substring(5,5) .所以自 5索引 存在 在我们的“模型”中作为可接受的值,并且由于 5 之间没有字符和 5结果我们得到空字符串。

类似的情况发生在 substring(0,0) 的情况下substring(1,1)等等,只要我们的模型可以接受索引。

StringIndexOutOfBoundsException仅当我们尝试访问 Not Acceptable 索引时才会发生,这意味着:

  • 负数:-1 , -2 , ...
  • 大于length .这里:6 7 , ...

关于java - String 类中的 Substring 方法达到了它不应该达到的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33600767/

相关文章:

java - 如何在 Java 中保持列表索引固定

java - 如何在 Java 程序中访问 DQL count() 查询的值

java - 如何从main调用方法?

java - 两个数的安全平均值的解释

python - 如果项目不以给定模式结尾则打印项目

python - 根据系列或数组中的索引访问 pandas 字符串列字符

c# - String.Concat 低效代码?

Python:使用 df1 的 2 列中的信息模拟 Excel 的索引匹配,用于查找 df2 中的位置

java - java中的synchronized关键字是如何发挥作用的?

python - 如何在Python中获取除某些值之外的排序数组的索引?