Japp. Das dürfte auch der Minimale Zeitunterschied zu Zacherl gewesen sein. Wenn man sprechende Variablenbezeichner einführt, sieht man man auch daß es sich um einen BoyerMoore für Substrings der Länge 1 handelt. Habs in meine Sammlung aufgenommen (hab öfters mal ein BlankReplace und dergleichen). Thanx to Zacherl und Amateurprofi.
Delphi-Quellcode:
class function TStrUtils.RemoveChars(const S, Chars: string): string; // Chars CaseSensitive;
var
I, Index: integer;
Skip: array[Char] of boolean;
begin
FillChar(Skip[#0], Length(Skip) * SizeOf(Skip[#0]), 0);
for I := 1 to Length(Chars) do
Skip[Chars[I]] := true;
SetLength(Result, Length(S));
Index := 0;
for I := 1 to Length(S) do
if not Skip[S[I]] then
begin
Inc(Index);
Result[Index] := S[I];
end;
SetLength(Result, Index);
end;