Heim > Backend-Entwicklung > C++ > Wie kann ich Sonderzeichen am effizientesten aus Zeichenfolgen in C# entfernen?

Wie kann ich Sonderzeichen am effizientesten aus Zeichenfolgen in C# entfernen?

Barbara Streisand
Freigeben: 2024-12-29 20:22:12
Original
666 Leute haben es durchsucht

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

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();
}
Nach dem Login kopieren

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:

  • Originalfunktion: 54,5 ms
  • Verbesserte Funktion: 47,1 ms
  • Regulärer Ausdruck: 294.4 ms

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\._]", "");
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage