Java字符串::过去的子字符串更改

Java字符串::过去的子字符串更改,java,string,substring,legacy-code,Java,String,Substring,Legacy Code,我必须在一段非常旧的代码(2005年之前)中修复错误,其中使用了下面的String::substring签名 public String substring(int beginIndex, int endIndex) 现在它包含从beginIndex到endIndex-1的所有字符。是否可能在过去它也包含endIndex上的字符 在代码中,它如下所示: String str = line.substring(119, 120); 将其与2个字母的字符串进行比较。 有人知道这方面的信息吗?签

我必须在一段非常旧的代码(2005年之前)中修复错误,其中使用了下面的String::substring签名

public String substring(int beginIndex, int endIndex)
现在它包含从beginIndex到endIndex-1的所有字符。是否可能在过去它也包含endIndex上的字符

在代码中,它如下所示:

String str = line.substring(119,  120);
将其与2个字母的字符串进行比较。
有人知道这方面的信息吗?

签名或
字符串#子字符串(int-beginIndex,int-endIndex)
方法从未更改

我从2003年左右开始研究Java,我知道它一直都是一样的。您可以验证这些年来您的代码运行在哪个版本的Java上,并从Oracle的归档文件中查看相应的文档,从那里您可以获得返回Java 1.1的文档:

看一看



希望这有帮助

似乎
子字符串
方法从一开始就做了同样的事情。这里您可以看到。

在Java2中,endIndex仍然被排除在外:不可能,我会说(请注意,旧java版本的javadoc仍然可用并且是公开的),我必须假设这是编写代码的开发人员的错误。那些在Java上工作的人对向后兼容性有着强烈的承诺,我不会看到他们改变这样的事情。我一直知道结尾索引是独占的。看起来像是原始源代码中的一个bug。通常,Java开发人员的目标是尽可能多地保持旧Java代码的运行。因为这里没有太多的理由来改变语义,我认为他们不太可能这样做。我很确定Java中的substring()行为一直都是一样的。