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
Lepaskan: 2025-01-24 15:51:12
asal
307 orang telah melayarinya

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan