簡體   English   中英

如何比較不區分大小寫和重音不敏感的字符串

[英]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()IgnoreNonSpaceIgnoreCase選項一起使用,如下所示:

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));

回應下面的評論,這也適用於tarafliTARAFLİ

以下代碼打印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與重載,它帶有適當的CultureInfoCompareOptions

string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace |
                                                   CompareOptions.IgnoreCase);

編輯:

關於CultureInfo的問題,來自MSDN

比較使用culture參數來獲取特定於文化的信息,例如大小寫規則和單個字符的字母順序。 例如,特定文化可以指定將某些字符組合視為單個字符,以特定方式比較大寫和小寫字符,或者字符的排序順序取決於前面或后面的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM