![]() |
Schnellstes Entfernen von Chars aus einem String?
Hallo! Was ist die SCHNELLSTE Methode, um aus einem String alle Zeichen eines anderen Strings zu entfernen? Also z.B.:
Delphi-Quellcode:
function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
|
AW: Schnellstes Entfernen von Chars aus einem String?
Ich habe keinen Vergleich, aber ich würde mal Testen, ob StringReplace() schnell genug ist.
|
AW: Schnellstes Entfernen von Chars aus einem String?
StringReplace wurde immer ein Zeichen ersetzen. Man müsste es somit für jeden Zeichen wiederholen (was auch keine Arbeit wäre).
Ansonsten aus dem Kopf:
Delphi-Quellcode:
function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
var i: Integer; begin Result := AStr; for i := Length(Result) downto 0 do if Pos(Result[i], CharsToRemove) > 0 then //if Pos(AnsiUpperCase(Result[i]), AnsiUpperCase(CharsToRemove)) > 0 then Delete(Result, i, 1); end; |
AW: Schnellstes Entfernen von Chars aus einem String?
Nein, man kann der Funktion auch Sagen, dass sie alle Vorkommnisse erseten soll.
(rfReplaceAll in Flags) |
AW: Schnellstes Entfernen von Chars aus einem String?
Zitat:
Delphi-Quellcode:
function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
var i,p: integer; ch: char; begin Result := AStr; for i := 1 to Length(CharsToRemove) do begin p := Pos(CharsToRemove[i],Result); if p > 0 then repeat Delete(Result,p,1); p := Pos(CharsToRemove[i],Result); until P = 0; end; end; |
AW: Schnellstes Entfernen von Chars aus einem String?
Zitat:
|
AW: Schnellstes Entfernen von Chars aus einem String?
So wie ich den TE verstanden habe hat er z. B. den Text "Hallo große Welt!" und möchte nun alle l und e entfernen, so das "Hao groß Wt!" rauskommt. Ich mag mich irren, denn ich hab StringReplace schon lange nicht genutzt. Also mit rfReplaceAll werden alle l in einem Vorgang entfert, aber nicht auch e. Für e müsste man einen zweiten Durchlauf machen. In etwa so:
Delphi-Quellcode:
(dieses Mal nicht aus dem Kopf ;) )
function RemoveCharsFromString(const AStr, CharsToRemove: string): string;
var i: Integer; begin Result := AStr; for i := 1 to Length(CharsToRemove) do Result := StringReplace(Result, CharsToRemove[i], '', [rfReplaceAll, rfIgnoreCase]); end; |
AW: Schnellstes Entfernen von Chars aus einem String?
Wenn man einen höheren IQ als ich hat, könnte man das aus der Frage herauslesen, aber "einfach gestrickte Typen" wie ich, haben den feinen Kniff glatt überlesen. :oops:
|
AW: Schnellstes Entfernen von Chars aus einem String?
Erster Versuch, der DEUTLICH schneller ist, als alle anderen bisher geposteten Lösungen:
Delphi-Quellcode:
Getestet mit einem 256KiB großen Zufallsstring (bestehend aus 'a'..'z') und CharsToRemove mit 'a' und 'z':
function RemoveCharsFromString(const AStr: String; CharsToRemove: TSysCharSet): string;
var I, J: Integer; begin SetLength(Result, Length(AStr)); J := 1; for I := 1 to Length(AStr) do begin if (not (AStr[I] in CharsToRemove)) then begin Result[J] := AStr[I]; J := J + 1; end; end; SetLength(Result, J - 1); end;
Code:
mm1256 : 656ms
Popov : 1359ms Zacherl1: 0ms |
AW: Schnellstes Entfernen von Chars aus einem String?
Warum so kompliziert, einfach mal die Beschreibung von SysUtils.StringReplace lesen
So wie ich das verstehe, ersetzt diese einen Teilstring durch einen neuen, nicht einzelne Zeichen. Also braucht man nur diese aufrufen mit RepaceAll und fertig. Wenn der Strig nicht Megabites gross ist sehe ich auch keine Notwendigkeit, über die Geschwindigkeit nachzudenken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz