Gibt es eine bessere Möglichkeit, Zeichenfolgen zu ersetzen?
Ich bin überrascht, dass Replace kein Zeichen- oder Zeichenfolgenarray akzeptiert. Ich denke, ich könnte meine eigene Erweiterung schreiben, aber ich war neugierig, ob es eine bessere Möglichkeit gibt, Folgendes zu tun? Beachten Sie, dass das letzte Ersetzen eine Zeichenfolge und kein Zeichen ist.
myString.Replace(';', '\n').Replace(',', '\n').Replace('\r', '\n').Replace('\t', '\n').Replace(' ', '\n').Replace("\n\n", "\n");
\t
und\r
sind enthalten in\s
. Ihre Regex entspricht also[;,\s]
.\s
ist eigentlich gleichbedeutend damit,[ \f\n\r\t\v]
dass Sie dort einige Dinge einfügen, die nicht in der ursprünglichen Frage enthalten waren. Außerdem wird in der ursprünglichen Frage gefragt, fürReplace("\n\n", "\n")
welche Regex Ihre Regex nicht geeignet ist .Wenn Sie sich besonders schlau fühlen und Regex nicht verwenden möchten:
Sie können dies auch mit geringem Aufwand in eine Erweiterungsmethode einwickeln.
Edit: Oder warte einfach 2 Minuten und ich werde es trotzdem schreiben :)
Und voila ...
quelle
Regex.Replace
über 8x langsamer als mehrerestring.Replace
Anrufe hintereinander. und 4x langsamer alsSplit
+Join
. Siehe gist.github.com/MarcinJuraszek/c1437d925548561ba210a1c6ed144452Sie können die Aggregatfunktion von Linq verwenden:
Hier ist die Erweiterungsmethode:
Anwendungsbeispiel für Erweiterungsmethoden:
quelle
Dies ist der kürzeste Weg:
quelle
Ohhh, der Performance-Horror! Die Antwort ist etwas veraltet, aber immer noch ...
quelle
Strings sind nur unveränderliche Char-Arrays
Sie müssen es nur veränderlich machen:
StringBuilder
unsafe
Welt und spiele mit Zeigern (obwohl gefährlich)und versuchen Sie, das Zeichenarray so oft wie möglich zu durchlaufen. Beachten Sie das
HashSet
hier, da es vermieden wird, die Zeichenfolge innerhalb der Schleife zu durchlaufen. Wenn Sie eine noch schnellere Suche benötigen, können Sie dieseHashSet
durch eine optimierte Suche nachchar
(basierend auf einerarray[256]
) ersetzen .Beispiel mit StringBuilder
Bearbeiten - Optimierte Version
Dann benutzt du es einfach so:
quelle
wchar_t
Sie daran, dass sich Strings in .net befinden. Sie ersetzen nur eine Teilmenge aller möglichen Zeichen (und Sie benötigen 65536 Bools, um dies zu optimieren ...)Sie können diese String-Erweiterungsmethoden auch einfach schreiben und irgendwo in Ihre Lösung einfügen:
Nennen Sie sie so:
Und das:
quelle
Verwenden Sie RegEx.Replace, ungefähr so:
Hier finden Sie weitere Informationen zu dieser MSDN-Dokumentation für RegEx.Replace
quelle
In Bezug auf die Leistung ist dies wahrscheinlich nicht die beste Lösung, aber es funktioniert.
quelle
quelle