2011-01-10 130 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 2011-01-10 13:58:18

+7

一切都不包含任何內容。什麼都無處不在。 – BoltClock 2011-01-10 14:24:22

回答

17

EndsWith

確定此字符串實例的結尾是否與指定的字符串匹配。

所有的字符串將在末尾匹配"" ...或字符串的任何其他部分。爲什麼?因爲在概念上,每個角色周圍都有空的字符串。

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

更新:

關於你的最後一個例子 - 這是記錄在LastIndexOf

如果值的String.Empty,則返回值是在這個最後的索引位置實例。


一個相關的問題是使用空作爲一個字符串結束 - 這發生在C和C++,但不是C#。

從MSDN - String Class (System)

在.NET框架中,一個字符串對象可以包括嵌入的空字符,算作字符串的長度的一部分。但是,在某些語言(如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(); 

所以,是爲俄德說,他們不總是一致。

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."

相關問題