在Visual Studio中忽略字符串比较中的重音字母

时间:2016-10-12 09:10:09

标签: c# string compare normalize

我是Visual Studio的新手,我正在尝试学习一些简单的任务。 我收到了一个比较两个字符串的代码(姓氏名字

    private bool compareNames(String value1, String value2)
    {
        if (value1 != null && value2 != null && value1.Trim().ToLower(). Equals(value2.Trim().ToLower()))
        {
            return true;
        }

        return false;
    }

上面的代码忽略区分大小写,但我要做的是也要忽略像ăîşéááö这样的特殊字符。

我尝试使用Normalize()执行此任务,但它似乎无法正常工作。

    private bool compareNames(String value1, String value2)
    {
        if (value1 != null && value2 != null && value1.Trim().ToLower(). Equals(value2.Trim().ToLower()))
        {
            return true;
        }
        else if (value1 != null && value2 != null && value1.Trim().Normalize().Equals(value2.Trim().Normalize()))
        {
            return true;
        }

        return false;
    }

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

可能的答案之一是使用RemoveDiacritcs方法。

static string RemoveDiacritics(string text) 
{
    var normalizedString = text.Normalize(NormalizationForm.FormD);
    var stringBuilder = new StringBuilder();

    foreach (var c in normalizedString)
    {
        var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
        if (unicodeCategory != UnicodeCategory.NonSpacingMark)
        {
            stringBuilder.Append(c);
        }
    }

    return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
}

此处有更多信息:How do I remove diacritics (accents) from a string in .NET?