Ok, falls du
diese optimierte Variante schon probiert hast, dann kann ich dein Problem verstehen. Diese Variante hab ich auch grad eben erst gesehen und probiert, aber die ist schon sauschnell...
Meine ist je nach Delimiter 2-4x so langsam (laut Testtool). Aber wie versprochen, kannst du meine ja mal ausprobieren:
Delphi-Quellcode:
function follows(const s,n : string; pos1 : integer) : boolean;
var x : integer;
begin
for x := 0 to length(n)-1 do
if n[x+1] <> s[pos1 + x] then
begin
result := false;
exit;
end;
result := true;
end;
function explode(const n,s : string) : TStringDynArray;
var temp : array of integer;
Len : integer;
x, count, laenge : integer;
begin
x := 1;
SetLength(temp, 20);
count := 1;
temp[0] := 1;
laenge := Length(s) - Length(n) + 1;
while x <= laenge do
begin
if follows(s,n,x) then
begin
inc(x, length(n));
inc(count);
if length(temp) < count then
SetLength(temp, count + 20);
temp[count-1] := x;
continue;
end;
inc(x);
end;
SetLength(temp, count);
SetLength(result, length(temp));
for x := 0 to High(temp)-1 do
begin
Len := temp[x+1]-temp[x]-length(n);
result[x] := copy(s, temp[x], Len);
end;
Len := length(s)-temp[high(temp)]+1;
result[high(temp)] := copy(s, temp[high(temp)], Len);
end;