[C#]字串比較
經常會使用到字串比較,最常見的寫法如下
string str = "How";
if (str == "How")
Console.WriteLine("相等");
Output :
不過在瞭解字串與==運算子後,可以換另一種寫法
string str = "How";
if (str.Equals("How"))
Console.WriteLine("相等");
Output :
為何會相等,在java中還必須使用intern()才會相等,但在C#中,只要值一樣,就會參考同一個記憶體位置,因此會相等。
有時候會需要不區分大小寫,像帳號,如以下範例。
string name = "how";
string compareName = "How";
bool IsEquals = name.Equals(compareName, StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine(IsEquals);
Output :
其實這有一點很好玩,Equals判斷值是否相同,實際上它的運作方式是找尋是否是同一個物件,當大小寫不同時,實際上為不同的String 物件,但因為使用了System.StringComparison.OrdinalIgnoreCase 比對時,因文化特性不區分大小寫。
當然以上範例都跟平時大家所使用的字串比較方法不一樣,比較常見的使用方法為Compare(),在這篇文章中有提到Equals != Compaere,文章中提到Equals為比較執行序號(大陸翻譯為散列碼),而Compare則有比較文化特性,但在上一個範例中,使用到System.StringComparison,在.NET 2.0後開始有此功能,我知道我英文非常差,不過還是有可能文章已過時,盼望有高人指點一下小弟我。
既然這麼不明確,那就使用常見慣用的寫法,Compare()方法,
string str = "How";
if(string.Compare(str,"How") == 0)
Console.WriteLine("相等");
Output :
這邊就要講解一下,Compare回傳的值所代表的意義,而為何回傳整數而不是布林值,這個方法主要是比較字串的大小,而判斷的依據為,MSDN:排序規則決定 Unicode 字元的字母順序,而此方法主要提供Array可以排序,所以回傳值為整數。
Compare回傳結果對照表
資料來源:MSDN
http://msdn.microsoft.com/zh-tw/library/zkcaxw5y%28v=vs.80%29.aspx
不區分大小寫,比起Equals簡單許多。
string str = "How";
string compareName = "how";
if (string.Compare(str, compareName, true) == 0)
Console.WriteLine("相等");
最後還有一個比較的方法,
string str = "How";
string compareName = "How";
if(str.CompareTo(compareName) == 0)
Console.WriteLine("相等");
Output :
結語:
在這篇筆記中的順序,主要是依照執行速度來編排,如有興趣可以參考這篇文章,原本想要在這篇紀錄 IComparable ,不過似乎有點龐大,可以拉出去寫另一篇筆記。
MSDN Library Reference :
Reference :
如文章有錯誤,煩請告知,新人發帖請多包涵