Den effizientesten Ansatz zum Entfernen von Sonderzeichen aus Zeichenfolgen finden
Ihre aktuelle Methode zum Entfernen von Sonderzeichen aus Zeichenfolgen mag ineffizient erscheinen, ist es aber Eigentlich einer der effizienteren Ansätze. Optimierungen können durch die Verwendung einer lokalen Zeichenvariablen oder eines Enumerators vorgenommen werden, um Array-Zugriffe zu reduzieren. Der bereitgestellte Code bietet diese Verbesserung:
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(); }
Leistungsvergleich
Benchmarking-Tests bestätigen die Effizienz der verbesserten Methode. Hier sind die Ergebnisse für verschiedene Ansätze, bei denen jede Funktion eine Million Mal auf einer 24-stelligen Zeichenfolge ausgeführt wird:
Alternative zu regulären Ausdrücken
Reguläre Ausdrücke können für diese Aufgabe ebenfalls verwendet werden, sie sind jedoch deutlich langsamer als einfache String-Manipulation. Hier ist ein Beispiel:
public static string RemoveSpecialCharactersRegex(string str) { return Regex.Replace(str, @"[^0-9a-zA-Z\._]", ""); }
Optimierung der Nachschlagetabelle
Eine weitere effiziente Lösung besteht darin, eine Nachschlagetabelle für zulässige Zeichen zu erstellen:
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); }
Dies Der Ansatz übertrifft sowohl die ursprüngliche als auch die verbesserte Methode hinsichtlich der Ausführungsgeschwindigkeit, geht jedoch mit dem Aufwand für die Initialisierung und Pflege einer großen Nachschlagetabelle einher Erinnerung.
Das obige ist der detaillierte Inhalt vonWie kann ich Sonderzeichen am effizientesten aus Zeichenfolgen in C# entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!