在Java中,你可以使用带有子字符串的负一个吗?[已关闭]

2022-09-02 00:35:11

负一可以用作 Java 中 string.substring 的结束索引吗?

例:

String str = "test";
str.substring(0, str.indexOf("q"));

编辑:在javadocs中,没有任何地方直接说endindex不能是负的。在其他语言和库中,有一些子字符串的实现允许负的 endindex,但不允许负的 beginindex,因此明确说明这一点似乎是相关的。它也没有以任何方式暗示。(编辑:好吧,这是松散地暗示,但我和显然其他亲自问我这个问题的人仍然觉得它很不清楚。这本来是一个简单的问答,我提供的不是我实际上试图找到这个琐碎问题的答案)


答案 1

不可以不允许使用负指数。

From String#substring(int beginIndex, int endIndex)

Throws:IndexOutOfBoundsException - 如果 beginIndex 为负数,或者 endIndex 大于此 String 对象的长度,或者 beginIndex 大于 endIndex

虽然文档没有直接说明 endIndex 不能为负1,但可以推导出来。重写相关要求会产生以下事实:

  1. “beginIndex 不能为负数” ->beginIndex >= 0
  2. “beginIndex 必须小于或等于 endIndex” ->endIndex >= beginIndex

因此,这是一个要求,这意味着endIndex不能为负数。endIndex >= beginIndex >= 0


无论如何,可以简单地重写为,假设我们对负端指数应该意味着什么有相同的想法。当然,最初的绑定要求仍然适用。str.substring(0, -x)str.substring(0, str.length() - x)


1 奇怪的是,String#subSequence 确实明确禁止负 endIndex。鉴于此,它认为可以清理文档,以便两种方法共享相同的简化前提条件文本。(作为奖励:在“Java 7”子序列文档中还有一个重要的拼写错误。


答案 2

,对子字符串的 endindex 使用负数以及大于字符串长度的数字将导致 StringIndexOutOfBoundsException。

(你不会相信在网上找到一个直接的答案是多么困难)