2

StringBuilder クラスのindexOf(String str, int fromIndex)メソッドの javadoc から次のコメントを理解しようとしています。

それは言います:

この文字列内で、指定されたインデックスから始まる、指定された部分文字列が最初に出現するインデックスを返します。返される整数は、次の最小値 k です。

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

そのような k の値が存在しない場合は、-1 が返されます。

インデックス < fromIndex str.length(). Math.min(fromIndex, str.length())私は何かを見逃していますか、それとも単に誤解を招く/間違ったコメントですか?

編集以下で指摘されているように、これはJava 7 javadocからのコメントです。Java 6には正しいコメントがあります。

4

2 に答える 2

0

いいえ、条件は基本的に、文字列に目的の部分文字列が含まれる、k が少なくともfromIndexかつ以下の最初の k に要約されます。str.length()

の場合str.length() < fromIndex、は生成された文字列への有効なインデックスではないため、startsWith条件は常にfalse になります。str.length()

于 2013-06-12T23:25:42.287 に答える
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 に答える