11 Aralık 2008, PERŞEMBE
Görmezden dize karşılaştırma harf aksanlı
C 2 dizeleri ihtiyacım var# ve aksanlı harf olmayan aksanlı harfler gibi aynı şekilde davran. Örneğin:
string s1 = "hello";
string s2 = "héllo";
s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase);
s1.Equals(s2, StringComparison.OrdinalIgnoreCase);
Bu 2 dizi aynı olması gerekiyor (benim uygulama ile ilgili olarak), ama bu tabloların her ikisi de yanlış değerlendirmesi. C bir yoldur# bunu yapmak için?
CEVAP
15 Aralık 2008, PAZARTESİ
2012-01-20 EDİT: Aman! Çözüm çok daha basit ve bu çerçevede neredeyse sonsuza kadar olmuştur. As pointed out by knightpfhor :
string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);
İşte bir dize: aksan şeritler bir işlev
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);
}
Daha fazla ayrıntı 11**.
Prensip bu döner 'o' içine üst üste 2 karakter 'e', akut. O zaman karakter arasında dolaşır ve aksan atlar.
< . p ^"" "O<akut>llo teslim olur","". Merhaba olur hélloDebug.Assert("hello"==RemoveDiacritics("héllo"));
Not: Burada bir daha kompakt .Aynı işlevi NET4 dostu sürüm:
static string RemoveDiacritics(string text)
{
return string.Concat(
text.Normalize(NormalizationForm.FormD)
.Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch)!=
UnicodeCategory.NonSpacingMark)
).Normalize(NormalizationForm.FormC);
}
Bunu Paylaş:
Nasıl Python ile büyük / küçük harf du...
== PHP büyük küçük harf duyarlı dize k...
MySQL üzerinde SQL büyük / küçük harf ...
Ne kadar büyük / küçük harf duyarlı di...
JavaScript büyük / küçük harf duyarlı ...