2011-01-10 12 views
18

好奇心のためにちょっとした質問。C#の文字列は空の文字列で終わりますか?

string str = "string"; 
Console.WriteLine(str.EndsWith(string.Empty));     //true 
Console.WriteLine(str.LastIndexOf(string.Empty) == str.Length); //false 
//of course string are indexed from 0, 
//just wrote if for fun to check whether empty string get some extra index 
///somehow by a miracle:) 

//finally 

Console.WriteLine(str.LastIndexOf(string.Empty) 
       == str.LastIndexOf('g'));      //true :) 
+0

「string.Empty」という概念は何ですか?それは何ですか? – thecoop

+7

すべてには何も含まれていません。何もどこにもありません。 – BoltClock

+0

私の質問は、そのような無意味な質問の投票が非常に多い理由でしょうか? C#文字列が空文字列で終わるかどうかを知ることが重要なのはなぜですか?貴重な情報をどのくらい正確に使いますか? – Blake7

答えて

17

EndsWith

は、この文字列インスタンスの末尾が、指定された文字列と一致するかどうかを決定します。

すべての文字列は末尾で""と一致します。または文字列の他の部分に一致します。どうして?概念的には、すべての文字の周りに空の文字列があります。

"" + "abc" + "" == "abc" == "" + "a" + "" + "b" + "" + "c" + "" 

更新:

あなたの最後の例について - これはLastIndexOfに文書化されています。

値はString.Emptyのであれば、戻り値は、この内の最後のインデックス位置ですインスタンス。


関連の問題は、文字列の終端にnullを使用することである - CおよびC++で起こるではなく、C#の。 MSDNから

- String Class (System)

の.NET Framework、Stringオブジェクトでは、文字列の長さの一部としてカウント埋め込まれたヌル文字を含めることができます。ただし、CやC++などの一部の言語では、ヌル文字は文字列の末尾を示します。それは文字列の一部と見なされず、文字列の長さの一部としてカウントされません。

6

これを試してみてください:

string str = "string"; 
Console.WriteLine(str.EndsWith(string.Empty));     //true 
Console.WriteLine(str.LastIndexOf(string.Empty) == str.Length-1); // true 
Console.ReadLine(); 

オデッドが言ったようにそうです、彼らは常に一致します。

+0

ooh Qに重要なサイトを持っているといいですか?コードスニペット – Badr

+0

OPのコード 'str.LastIndexOf(string.Empty)== str.Length'は間違いですが、OPは' string.Empty'が** g ** – Bolu

+1

の後にあると思うので間違いですもちろん、文字列は0ベースのインデックスを使用しています。空の文字列が何とか奇跡によって何らかの余分なインデックスを取得しているかどうかを確認するために楽しいために書きました:) – nan

2

はそれについてこのように考える:LastIndexOfが空の文字列と種類の意味がありません。あなたは空の文字列がにあり、各文字の間にある文字列内のすべてののインデックスと言うことができます。これdocumentation返されるべきもののために決定的な答えを提供しています。

値がString.Emptyである場合、戻り値は このインスタンス内の最後のインデックス位置です。

少なくともこの場合、実際のインデックスを返します。それがインデックスでもないLastIndexOfというメソッドの結果を返してしまう文字列の長さ(インデックスを表す "終わり"の終わりを表す)を返すと、結果は返されます。

そして、ここではそれを見て別の方法です:私は、このお持ちの場合:

Dim index As Integer = str.LastIndexOf("") 

を...そして、私はこれを行うことができる必要があります:

Dim substr As String = str.Substring(index, "".Length) 

を...と""を取得しますバック。確かに、LastIndexOf最後のインデックスを文字列に返した場合、それは機能します。 文字列の の長さがの場合、 ArgumentOutOfRangeExceptionが返されます。 編集:私は間違っていたようです。うまくいけば私の最初のポイントは十分に強いです;)

0

さらに詳しい情報はthis questionとその回答があります。

特に、"Indeed, the empty string logically occurs between every pair of characters."

関連する問題