Dalam C#, lebih sukar untuk mengendalikan rentetan dengan watak tekanan. Pertimbangkan contoh berikut:
Kedua -dua rentetan ini sepatutnya sama, tetapi kedua -dua kenyataan kembali palsu. Ini kerana aksen pada surat itu dianggap watak yang berbeza. Untuk menyelesaikan masalah ini, kita boleh menggunakan teknologi yang menghilangkan simbol tambahan (atau saling berkaitan) sebelum membandingkan rentetan.
<code class="language-csharp">string s1 = "hello"; string s2 = "héllo"; s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase); s1.Equals(s2, StringComparison.OrdinalIgnoreCase);</code>
Berikut adalah kaedah mengeluarkan simbol tambahan dari rentetan:
Kaedah ini mula -mula menyeragamkan rentetan ke dalam bentuk D, yang akan dibahagikan kepada pelbagai aksara dengan watak dengan tekanan. Ia melelehkan watak -watak ini dan menapis tanda bukan interval (iaitu tekanan). Akhirnya, ia menyambung semula watak -watak yang tersisa untuk membentuk rentetan tanpa tekanan.Untuk menggunakan kaedah ini, hanya gunakannya kepada dua rentetan sebelum membandingkannya. Contohnya:
<code class="language-csharp">static string RemoveDiacritics(string text) { // 将字符串规范化为 Unicode 规范化形式 D string formD = text.Normalize(NormalizationForm.FormD); // 创建一个 StringBuilder 来保存结果字符串 StringBuilder sb = new StringBuilder(); // 迭代规范化字符串中的字符 foreach (char ch in formD) { // 检查字符是否不是非间隔标记 UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(ch); if (uc != UnicodeCategory.NonSpacingMark) { // 将字符附加到 StringBuilder sb.Append(ch); } } // 将 StringBuilder 转换为字符串并将其规范化为 Unicode 规范化形式 C return sb.ToString().Normalize(NormalizationForm.FormC); }</code>
Ini akan dinilai dengan betul sebagai benar, memikirkan bahawa tekanan "e" dalam "héllo" bersamaan dengan "e" bukan "dalam" hello ".
Atas ialah kandungan terperinci Bagaimanakah saya dapat membandingkan rentetan dalam C# sambil mengabaikan watak beraksen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!