如何比较不区分大小写和重音不敏感的字符串

时间:2015-01-12 13:51:02

标签: c# .net string-comparison case-insensitive 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İ 

2 个答案:

答案 0 :(得分:13)

要忽略案例和重音,您可以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));

根据您的评论,这适用于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));

答案 1 :(得分:3)

您可以将string.Compare与重载CultureInfoCompareOptions

一起使用
string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace |
                                                   CompareOptions.IgnoreCase);

修改

关于CultureInfo的问题,来自MSDN

  

比较使用培养参数获得培养特异性   信息,例如套管规则和字母顺序   个性人物。例如,特定文化可以指定   将某些字符组合视为单个字符   字符,在a中比较大写和小写字符   特殊的方式,或者角色的排序依赖于   在其之前或之后的字符。