Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengeluarkan Aksara Khas dengan Paling Cekap daripada Rentetan dalam C#?

Bagaimanakah Saya Boleh Mengeluarkan Aksara Khas dengan Paling Cekap daripada Rentetan dalam C#?

Barbara Streisand
Lepaskan: 2024-12-29 20:22:12
asal
662 orang telah melayarinya

How Can I Most Efficiently Remove Special Characters from Strings in C#?

Mencari Pendekatan Paling Cekap untuk Mengalih Keluar Aksara Khas daripada Rentetan

Kaedah semasa anda untuk mengalih keluar aksara khas daripada rentetan mungkin kelihatan tidak cekap, tetapi ia adalah sebenarnya salah satu pendekatan yang lebih cekap. Pengoptimuman boleh dibuat dengan menggunakan pembolehubah aksara tempatan atau enumerator untuk mengurangkan akses tatasusunan. Kod yang disediakan menawarkan peningkatan ini:

public static string RemoveSpecialCharacters(string str) {
   StringBuilder sb = new StringBuilder();
   foreach (char c in str) {
      if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '.' || c == '_') {
         sb.Append(c);
      }
   }
   return sb.ToString();
}
Salin selepas log masuk

Perbandingan Prestasi

Ujian penandaarasan mengesahkan kecekapan kaedah yang dipertingkatkan. Berikut ialah keputusan untuk pendekatan yang berbeza, menjalankan setiap fungsi sejuta kali pada rentetan 24 aksara:

  • Fungsi asal: 54.5 ms
  • Fungsi yang dipertingkatkan: 47.1 ms
  • Ungkapan biasa: 294.4 ms

Alternatif Ungkapan Biasa

Ekspresi biasa juga boleh digunakan untuk tugas ini, tetapi ia lebih perlahan daripada manipulasi rentetan ringkas. Berikut ialah contoh:

public static string RemoveSpecialCharactersRegex(string str) {
   return Regex.Replace(str, @"[^0-9a-zA-Z\._]", "");
}
Salin selepas log masuk

Pengoptimuman Jadual Carian

Satu lagi penyelesaian cekap melibatkan mencipta jadual carian untuk aksara yang dibenarkan:

private static bool[] _lookup;

static Program() {
   _lookup = new bool[65536];
   for (char c = '0'; c <= '9'; c++) _lookup[c] = true;
   for (char c = 'A'; c <= 'Z'; c++) _lookup[c] = true;
   for (char c = 'a'; c <= 'z'; c++) _lookup[c] = true;
   _lookup['.'] = true;
   _lookup['_'] = true;
}

public static string RemoveSpecialCharactersLookup(string str) {
   char[] buffer = new char[str.Length];
   int index = 0;
   foreach (char c in str) {
      if (_lookup[c]) {
         buffer[index] = c;
         index++;
      }
   }
   return new string(buffer, 0, index);
}
Salin selepas log masuk

Ini pendekatan mengatasi kedua-dua kaedah asal dan kaedah yang lebih baik dari segi kelajuan pelaksanaan, tetapi datang dengan kos untuk memulakan dan mengekalkan jadual carian dalam ingatan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Aksara Khas dengan Paling Cekap daripada Rentetan dalam C#?. 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