[英]How to compare strings with case insensitive and accent insensitive
如何比較不區分大小寫和重音不敏感的字符串
好吧,這在SQL服務器上很容易完成
但是我想在C#.NET 4.5.1上做同樣的事情。
我怎樣才能以最恰當的方式做到這一點?
我的意思是這三個字符串在比較時應該返回相等
http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html
http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html
http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLı-BANT-12cm-x25mt_154202.html
我需要一個方法,可以說下面這兩個是相同的SQL服務器說它們是相同的。
tarafli
TARAFLİ
要忽略大小寫和重音,可以將string.Compare()
與IgnoreNonSpace
和IgnoreCase
選項一起使用,如下所示:
string s1 = "http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html";
string s2 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html";
string s3 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLı-BANT-12cm-x25mt_154202.html";
Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase));
Console.WriteLine(string.Compare(s2, s3, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase));
回應下面的評論,這也適用於tarafli
和TARAFLİ
。
以下代碼打印0, 表示字符串相等 :
string s1 = "tarafli";
string s2 = "TARAFLİ";
Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase));
在這里它使用土耳其文化(我猜測正確的文化是什么)。 這也打印0:
string s1 = "tarafli";
string s2 = "TARAFLİ";
var trlocale = CultureInfo.GetCultureInfo("tr-TR");
Console.WriteLine(string.Compare(s1, s2, trlocale, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase));
你可以使用string.Compare
與重載,它帶有適當的CultureInfo
和CompareOptions
:
string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace |
CompareOptions.IgnoreCase);
編輯:
關於CultureInfo
的問題,來自MSDN :
比較使用culture參數來獲取特定於文化的信息,例如大小寫規則和單個字符的字母順序。 例如,特定文化可以指定將某些字符組合視為單個字符,以特定方式比較大寫和小寫字符,或者字符的排序順序取決於前面或后面的字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.