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(); }
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:
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\._]", ""); }
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); }
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!