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

好的,这在SQL Server上很容易完成

但是我想在C#.NET 4.5.1上做同样的事情。

我该如何以最适当的方式做到这一点?

我的意思是比较时这3个字符串应该返回相等

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 Server,说它们是相等的。
 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));

关于c# - 如何比较不区分大小写和不区分重音的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27903503/

10-10 14:56