7

私の友人は、私が説明できないこの奇妙な行動で私に来ました、どんな洞察の見方もいただければ幸いです。

VS 2005(C#2.0)を実行している場合、次のコードは動作を示しています

int rr = "test".IndexOf("");
Console.WriteLine(rr.ToString());

上記のコードで、「0」を出力します。これは、戻り値が-1であることを明確に示しています。

これは、次のクラスが動作を示すJavaでも発生します。

public class Test{
 public static void main(String[] args){
   System.out.println("Result->"+("test".indexOf("")));
 }
}

Java1.6.0_17を実行しています

4

8 に答える 8

21

C#ドキュメントからの引用:

値がEmptyの場合、戻り値は0です。

あなたが説明する振る舞いは完全に期待通りです(少なくともC#では)。

于 2010-04-02T19:14:09.587 に答える
11

0は正しいです。位置ゼロから開始すると、長さゼロの文字列を(自明に)一致させることができます。同様に、「」には「」が含まれます

于 2010-04-02T19:13:56.590 に答える
10

これは規則の例外ではなく、indexOfstartsWithがどのように定義されているかという自然な結果です。

あなたはそれ"test".indexOf("")が戻るべきだと主張しています-1"test".startsWith("")これは基本的に、を返す必要があるクレームと同等falseです。どうしてこれなの?このケースは、ドキュメントで「戻る」として具体的に扱われていますがtrue、これは単なる恣意的な決定ではありません。

"test".startsWith("te")たとえば、どのように決定しますか?最も簡単な方法は、再帰を使用することです。どちらの文字列も文字で始まるため、't'呼び出し"est".startsWith("e")て結果を返します。同様に、呼び出し"st".startsWith("")て結果を返します。しかし、答えはである必要があることはすでに知っているtrueので、すべての文字列が。で始まるのはそのためです""

于 2010-04-02T20:03:11.123 に答える
6

0は正しいです。Javadocsは、次のように機能することを指摘してindexOfいます。

返される整数は、次のような最小値kです。

 this.startsWith(str, k)

で始まる文字""列はすべて元の文字列と同じであるため(すべての文字列は)で始まるため""、の最小値は常に0です。kstr = ""

于 2010-04-02T19:15:04.057 に答える
3

次のように考えてください。IndexOfは、文字列を検索するときに、位置0から開始し、文字列を一致させようとします。文字列が収まらない場合は、位置1、2などに移動します。空で呼び出す場合文字列、それは空の文字列を位置0から始まり長さ0の文字列と一致させようとします。

ToString補足: Console.Write / WriteLineを使用している場合、使用する本当の理由はありません。ToStringこの関数は、問題のオブジェクトのメソッドを自動的に呼び出します。(ToStringをオーバーロードしない限り)

于 2010-04-02T19:18:51.727 に答える
2

0を返す必要があります。空の文字列の最初の出現を探していますよね?:)

于 2010-04-02T19:15:18.700 に答える
1

それの楽しみのためだけに。Pythonでもそのように機能します

>>> "test".startswith("")
True
>>> "test".index("")
0

Pythonは、-1の代わりにValueErrorをスローします。

>>> "test".index('r')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
于 2010-04-03T01:38:26.347 に答える
1

もっと楽しいphpは実際にはもっと良い仕事をします!

php -r "print strpos('test','');"
PHP Warning:  strpos(): Empty delimiter. in Command line code on line 1
于 2010-04-03T05:55:03.753 に答える