[C#]字串比較

[C#]字串比較

經常會使用到字串比較,最常見的寫法如下

            string str = "How";
            if (str == "How")
                Console.WriteLine("相等");

Output :

2012-04-28_210009

不過在瞭解字串與==運算子後,可以換另一種寫法

            string str = "How";
            if (str.Equals("How"))
                Console.WriteLine("相等");

Output :

2012-04-28_210256

為何會相等,在java中還必須使用intern()才會相等,但在C#中,只要值一樣,就會參考同一個記憶體位置,因此會相等。

 

有時候會需要不區分大小寫,像帳號,如以下範例。

            string name = "how";
            string compareName = "How";

            bool IsEquals = name.Equals(compareName, StringComparison.CurrentCultureIgnoreCase);

            Console.WriteLine(IsEquals);

 

Output :

2012-04-28_210958

其實這有一點很好玩,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 :

2012-04-28_210256

這邊就要講解一下,Compare回傳的值所代表的意義,而為何回傳整數而不是布林值,這個方法主要是比較字串的大小,而判斷的依據為,MSDN:排序規則決定 Unicode 字元的字母順序,而此方法主要提供Array可以排序,所以回傳值為整數。

 

 

image
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("相等");

Output :
2012-04-28_210009

 

最後還有一個比較的方法,

            string str = "How";
            string compareName = "How";

            if(str.CompareTo(compareName) == 0)
                Console.WriteLine("相等");

Output :

2012-04-28_210009

 

結語:

在這篇筆記中的順序,主要是依照執行速度來編排,如有興趣可以參考這篇文章,原本想要在這篇紀錄 IComparable ,不過似乎有點龐大,可以拉出去寫另一篇筆記。

 

 

 

 

MSDN Library Reference :

String.Compare 方法

How to 系列

 

Reference :

Equals != Compaere

字串比較效能

Jeff 隨手記

 

如文章有錯誤,煩請告知,新人發帖請多包涵

 

創用 CC 授權條款