2

我试图从 StringBuilder 类的indexOf(String str, int fromIndex)方法的 javadoc 中理解以下评论。

它说:

返回此字符串中第一次出现指定子字符串的索引,从指定索引开始。返回的整数是最小值 k,其中:

    k >= Math.min(fromIndex, str.length()) &&
                  this.toString().startsWith(str, k)

如果不存在这样的 k 值,则返回 -1。

现在,我看不到 in 的原因str.length()Math.min(fromIndex, str.length())因为它允许在索引 < fromIndex 上找到字符串。我是否遗漏了什么,或者这只是一个误导/错误的评论?

编辑如下所示,这是来自 Java 7 javadoc 的评论;java 6 有正确的注释。

4

2 回答 2

0

这是一个错误。它应该是this.length()而不是str.length().

这允许fromIndex大于在为空this.length()的情况下。str

例子:

StringBuilder sb = new StringBuilder("Example");
System.out.println(sb.indexOf("", 1234)); //Outputs sb.length(), which is 7.

注意:String#indexOf(String, int)行为方式相同。

于 2013-06-12T23:45:23.783 回答
0

否 条件基本上归结为第一个 k 使得 k 至少fromIndex小于或等于str.length(),此时字符串包含所需的子字符串。

如果str.length() < fromIndex,则startsWith条件将始终为假,因为str.length()不是生成的字符串的有效索引。

于 2013-06-12T23:25:42.287 回答