我需要比较C#中的2个字符串,并将重音字母视为非重音字母。例如:
string s1 = "hello";
string s2 = "héllo";
s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase);
s1.Equals(s2, StringComparison.OrdinalIgnoreCase);
这两个字符串需要相同(就我的应用程序而言),但这两个语句的计算结果都为false。在C#中有没有办法做到这一点?
发布于 2011-10-11 10:48:31
如果不需要转换字符串,并且只想检查是否相等,可以使用
string s1 = "hello";
string s2 = "héllo";
if (String.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0)
{
// both strings are equal
}
或者,如果您还希望比较不区分大小写
string s1 = "HEllO";
string s2 = "héLLo";
if (String.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase) == 0)
{
// both strings are equal
}
发布于 2013-12-20 00:15:38
我不得不做一些类似的事情,但使用的是StartsWith方法。这是一个从@Serge - appTranslator派生的简单解决方案。
下面是一个扩展方法:
public static bool StartsWith(this string str, string value, CultureInfo culture, CompareOptions options)
{
if (str.Length >= value.Length)
return string.Compare(str.Substring(0, value.Length), value, culture, options) == 0;
else
return false;
}
对于一个班轮来说,是个怪胎;)
public static bool StartsWith(this string str, string value, CultureInfo culture, CompareOptions options)
{
return str.Length >= value.Length && string.Compare(str.Substring(0, value.Length), value, culture, options) == 0;
}
called和case incensitive可以这样命名
value.ToString().StartsWith(str, CultureInfo.InvariantCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)
发布于 2008-12-11 16:57:06
下面的方法CompareIgnoreAccents(...)
处理您的示例数据。以下是我获得背景信息的文章:http://www.codeproject.com/KB/cs/EncodingAccents.aspx
private static bool CompareIgnoreAccents(string s1, string s2)
{
return string.Compare(
RemoveAccents(s1), RemoveAccents(s2), StringComparison.InvariantCultureIgnoreCase) == 0;
}
private static string RemoveAccents(string s)
{
Encoding destEncoding = Encoding.GetEncoding("iso-8859-8");
return destEncoding.GetString(
Encoding.Convert(Encoding.UTF8, destEncoding, Encoding.UTF8.GetBytes(s)));
}
我认为扩展方法会更好:
public static string RemoveAccents(this string s)
{
Encoding destEncoding = Encoding.GetEncoding("iso-8859-8");
return destEncoding.GetString(
Encoding.Convert(Encoding.UTF8, destEncoding, Encoding.UTF8.GetBytes(s)));
}
那么它的用法是:
if(string.Compare(s1.RemoveAccents(), s2.RemoveAccents(), true) == 0) {
...
https://stackoverflow.com/questions/359827
复制相似问题