gpt4 book ai didi

c# - 在字符串比较中忽略重音字母

转载 作者:IT王子 更新时间:2023-10-29 03:33:12 26 4
gpt4 key购买 nike

我需要在 C# 中比较 2 个字符串,并将重音字母与非重音字母一样对待。例如:

string s1 = "hello";
string s2 = "héllo";

s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase);
s1.Equals(s2, StringComparison.OrdinalIgnoreCase);

这两个字符串必须相同(就我的应用程序而言),但是这两个语句的计算结果都是假的。在 C# 中有没有办法做到这一点?

最佳答案

FWIW,knightfor's answer以下(截至撰写本文时)应该是公认的答案。

这是一个从字符串中去除变音符号的函数:

static string RemoveDiacritics(string text)
{
string formD = text.Normalize(NormalizationForm.FormD);
StringBuilder sb = new StringBuilder();

foreach (char ch in formD)
{
UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(ch);
if (uc != UnicodeCategory.NonSpacingMark)
{
sb.Append(ch);
}
}

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

更多详情 on MichKap's blog (RIP...)。

原理是它将'é'变成2个连续的字符'e',锐音符。然后它遍历字符并跳过变音符号。

“héllo”变成了“he llo”,后者又变成了“hello”。

Debug.Assert("hello"==RemoveDiacritics("héllo"));

注意:这是同一函数的更紧凑的 .NET4+ 友好版本:

static string RemoveDiacritics(string text)
{
return string.Concat(
text.Normalize(NormalizationForm.FormD)
.Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch)!=
UnicodeCategory.NonSpacingMark)
).Normalize(NormalizationForm.FormC);
}

关于c# - 在字符串比较中忽略重音字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/359827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com