Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Melakukan Perbandingan Rentetan Tidak Peka Huruf dalam C# Semasa Mengabaikan Aksara Beraksen?

Bagaimanakah Saya Boleh Melakukan Perbandingan Rentetan Tidak Peka Huruf dalam C# Semasa Mengabaikan Aksara Beraksen?

DDD
DDDasal
2025-01-24 15:51:12361semak imbas

How Can I Perform Case-Insensitive String Comparisons in C# While Ignoring Accented Characters?

Perbandingan Rentetan Tidak Peka Huruf dalam C# Mengabaikan Aksen

Perbandingan rentetan C# selalunya memerlukan mengabaikan kedua-dua tanda huruf besar dan aksen. Pilihan standard seperti StringComparison.InvariantCultureIgnoreCase atau StringComparison.OrdinalIgnoreCase tidak mengendalikan aksara beraksen dengan sewajarnya. Ini memerlukan penyelesaian tersuai untuk perbandingan yang tepat.

Mengalih Keluar Diakritik (Aksen)

Fungsi berikut dengan cekap membuang diakritik daripada rentetan:

<code class="language-csharp">static string RemoveAccents(string text)
{
    string normalized = text.Normalize(NormalizationForm.FormD);
    StringBuilder sb = new StringBuilder();

    foreach (char c in normalized)
    {
        if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
        {
            sb.Append(c);
        }
    }

    return sb.ToString().Normalize(NormalizationForm.FormC);
}</code>

Fungsi ini:

  1. Menormalkan: Menukar rentetan input kepada NormalizationForm.FormD, memisahkan aksara asas dan diakritik.
  2. Penapis: Berulang melalui aksara, menambahkan hanya aksara yang bukan tanda tanpa jarak (aksen).
  3. Menormalkan semula: Berlaku NormalizationForm.FormC untuk pembersihan akhir.

Melaksanakan Perbandingan Kes-Tidak Peka

Untuk membandingkan rentetan sambil mengabaikan huruf besar dan aksen, gunakan RemoveAccents dan ToLowerInvariant() sebelum perbandingan:

<code class="language-csharp">string str1 = "Héllo";
string str2 = "Hello";

if (RemoveAccents(str1).ToLowerInvariant() == RemoveAccents(str2).ToLowerInvariant())
{
    // Strings are equal (ignoring case and accents)
}</code>

Ini memastikan perbandingan yang mantap yang menganggap "Héllo" dan "Hello" sebagai sama. Kaedah ini menyediakan penyelesaian yang fleksibel dan tepat untuk perbandingan rentetan huruf besar dan tidak sensitif aksen dalam C#.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melakukan Perbandingan Rentetan Tidak Peka Huruf dalam C# Semasa Mengabaikan Aksara Beraksen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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