EDIT 2012-01-20: Ya ampun! Solusinya jauh lebih sederhana dan telah berada dalam kerangka kerja hampir selamanya. Seperti yang ditunjukkan oleh knightpfhor :
string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);
Berikut adalah fungsi yang menghapus diakritik dari string:
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);
}
Lebih detail di blog MichKap ( RIP ... ).
Prinsipnya adalah apakah itu mengubah 'é' menjadi 2 karakter berturut-turut 'e', akut. Ini kemudian beralih melalui karakter dan melompati diakritik.
"héllo" menjadi "he <acute> llo", yang pada gilirannya menjadi "hello".
Debug.Assert("hello"==RemoveDiacritics("héllo"));
Catatan: Inilah versi .NET4 + friendly dari fungsi yang sama:
static string RemoveDiacritics(string text)
{
return string.Concat(
text.Normalize(NormalizationForm.FormD)
.Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch)!=
UnicodeCategory.NonSpacingMark)
).Normalize(NormalizationForm.FormC);
}
string.Normalize
?Jika Anda tidak perlu mengonversi string dan Anda hanya ingin memeriksa kesetaraan yang dapat Anda gunakan
atau jika Anda ingin perbandingan menjadi case-sensitive juga
sumber
Metode berikut ini
CompareIgnoreAccents(...)
berfungsi pada data contoh Anda. Berikut adalah artikel tempat saya mendapatkan informasi latar belakang saya: http://www.codeproject.com/KB/cs/EncodingAccents.aspxSaya pikir metode ekstensi akan lebih baik:
Maka penggunaannya akan seperti ini:
sumber
Saya harus melakukan sesuatu yang serupa tetapi dengan metode StartsWith. Berikut adalah solusi sederhana yang berasal dari @Serge - appTranslator.
Berikut ini adalah metode ekstensi:
Dan untuk satu liner aneh;)
Accent incensitive dan case incensitive startingWith dapat disebut seperti ini
sumber
Cara yang lebih sederhana untuk menghilangkan aksen:
sumber
coba kelebihan ini pada Metode String.Compare.
Metode String. Bandingkan (String, String, Boolean, CultureInfo)
Ini menghasilkan nilai int berdasarkan operasi membandingkan termasuk cultureinfo. contoh di halaman membandingkan "Ubah" di en-US dan en-CZ. CH dalam en-CZ adalah "huruf" tunggal.
contoh dari tautan
karenanya untuk bahasa-bahasa beraksen Anda harus mendapatkan budaya lalu menguji string berdasarkan itu.
http://msdn.microsoft.com/en-us/library/hyxc48dt.aspx
sumber