Heim >Backend-Entwicklung >C++ >Was ist der effizienteste Weg, Sonderzeichen aus einer Zeichenfolge zu filtern?

Was ist der effizienteste Weg, Sonderzeichen aus einer Zeichenfolge zu filtern?

Linda Hamilton
Linda HamiltonOriginal
2025-01-01 04:31:12150Durchsuche

What's the Most Efficient Way to Filter Special Characters from a String?

Effiziente Zeichenfilterung in Zeichenfolgen

Dieser Artikel befasst sich mit der Aufgabe, Sonderzeichen effizient aus einer Zeichenfolge zu entfernen und sicherzustellen, dass sie nur alphanumerische Zeichen enthält. Unterstriche und Punkte.

Der bereitgestellte Code überprüft eine Methode, die eine Schleife zur Zeichenvalidierung verwendet, obwohl sie möglicherweise nicht die effizienteste ist Ansatz. Die vorgeschlagene Optimierung umfasst die Verwendung eines Enumerators und die Initialisierung eines StringBuilder mit der erwarteten Kapazität, um Array-Zugriffe zu reduzieren.

Für eine effizientere Option könnten reguläre Ausdrücke verwendet werden, aber bei kurzen Zeichenfolgen kann die Leistung beeinträchtigt werden. Der folgende reguläre Ausdruck würde zulässige Zeichen erfolgreich abgleichen:

[0-9A-Za-z._]+

Allerdings übertrifft eine Nachschlagetabelle in diesem Szenario sowohl die Zeichenfolgenmanipulation als auch reguläre Ausdrücke. Die Nachschlagetabelle speichert boolesche Werte, die angeben, ob jedes Zeichen zulässig ist, was den Filtervorgang erheblich beschleunigt.

Die Komplettlösung mit integrierter Nachschlagetabelle:

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 RemoveSpecialCharacters(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);
}

Leistungstests zeigen, dass die Nachschlagetabelle Der Ansatz ist deutlich schneller als die Schleifenmethode oder der reguläre Ausdruck, mit einer Ausführungszeit von etwa 13 Millisekunden für eine 24-stellige Zeichenfolge.

Das obige ist der detaillierte Inhalt vonWas ist der effizienteste Weg, Sonderzeichen aus einer Zeichenfolge zu filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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