我正在尝试从StringBuilder类的indexOf(String str, int fromIndex)方法的javadoc中理解以下注释。
它说:
从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。返回的整数是最小值k,其中:
k >= Math.min(fromIndex, str.length()) && this.toString().startsWith(str, k)
如果不存在这样的k值,则返回-1。
现在,我无法在str.length()
中看到Math.min(fromIndex, str.length())
的原因,因为它允许在索引上找到String<的fromIndex。我错过了什么,或者这只是一个误导/错误的意见?
编辑:as pointed below这是来自Java 7 javadoc的评论; java 6有正确的评论。
答案 0 :(得分:0)
没有条件基本归结为第一个k,使得k至少为fromIndex
且小于或等于str.length()
,其中该字符串包含所需的子字符串。
如果str.length() < fromIndex
,那么startsWith
条件将始终为false,因为str.length()
不是生成的字符串的有效索引。
答案 1 :(得分: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)
的行为方式相同。