Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya dapat membandingkan rentetan dalam C# sambil mengabaikan watak beraksen?

Bagaimanakah saya dapat membandingkan rentetan dalam C# sambil mengabaikan watak beraksen?

Linda Hamilton
Lepaskan: 2025-01-24 16:07:10
asal
493 orang telah melayarinya

How Can I Compare Strings in C# While Ignoring Accented Characters?

Apabila membandingkan rentetan dalam C#, abaikan aksara aksen

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>
Salin selepas log masuk
Keluarkan simbol tambahan

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan