Ersetzen von schlechten Zeichen eines Strings durch ungültige Zeichen

8

Ich habe mich gerade gefragt, wie man am einfachsten einen String ersetzt, der später ersetzt werden muss.

Zum Beispiel:

%Vor%
  • Das gewünschte Ergebnis: [[]Hello World[]]
  • Das tatsächliche Ergebnis: [[[]]Hello World[]]

Der Grund ist offensichtlich die zweite Ersetzung der bereits modifizierten Zeichenfolge.

Wie kann man alle Vorkommen von "schlechten" Zeichen durch Zeichen ersetzen, die "schlechte" Zeichen enthalten?

Eine schnelle Messung aller Ansätze ergab, dass der StringBuilder der effizienteste Weg ist.

190kb Datei (alle in Millisekunden)

%Vor%

7 MB Datei

%Vor%

Übrigens war der direkte StringBuilder -Ansatz von John doppelt so schnell wie der Aggregate Ansatz von Sehe .

Ich habe eine Erweiterung daraus gemacht:

%Vor%     
Tim Schmelter 13.02.2012, 16:38
quelle

6 Antworten

5

Hier ist ein sehr uncool Weg, es zu tun. Aber es hat den Vorteil, dass ich ziemlich narrensicher bin, denke ich, und keine Regex benutze (falls du Regex lieber nicht benutzen willst).

%Vor%     
John M Gant 13.02.2012, 16:51
quelle
4

Was ist mit:

%Vor%     
mfeineis 13.02.2012 16:42
quelle
3

Was ist mit diesem eleganten Ansatz für reguläre Ausdrücke?

%Vor%

Einheit testen?

%Vor%

Test bestanden

Bearbeite @JohnMcGrant

Hier ist eine etwas weniger ineffiziente Version Ihres Codes, die übrigens genau dasselbe Verhalten wie die obige Regex hat:

%Vor%     
sehe 13.02.2012 16:51
quelle
1

Wie wäre es mit:

%Vor%

Beachten Sie, dass dadurch das Problem mit mehreren Schleifen vermieden wird, aber mindestens so viele Arrays erstellt werden, wie Zeichen in der Eingabezeichenfolge enthalten sind, sodass sie in Bezug auf die Leistung möglicherweise nicht optimal ist.

    
vc 74 13.02.2012 16:45
quelle
1
%Vor%     
Piotr Justyna 13.02.2012 16:52
quelle
0

Ich hatte genau das gleiche Problem, also habe ich eine Hilfsfunktion gemacht, um genau das zu tun

%Vor%     
Matthew 13.02.2012 17:00
quelle

Tags und Links