Dann hast du String Replace nicht verstanden, denn das ist genauso wie StringReplace geplant ist, also völlig richtig.
Recursionen gibt es nicht.
Delphi-Quellcode:
S := 'xxxxxxxxxx';
// 1122334455
S := StringReplace(S, 'xx', 'x', [rfReplaceAll]);
// S = 'xxxxx'
// 12345
weil rate mal was hier sonst passieren würde
Delphi-Quellcode:
S := 'xxx';
S := StringReplace(S, 'x', 'xx', [rfReplaceAll]);
das ergäbe bei Rekursion nicht 'xxxxxx' sondern einen unendlichlangen String aus x (also OutOfMemory oder wen unendlich Speicher vorhanden, dann würde dies Funkion nie ferig werden)
PS:
DoppelzeichenZuZeichen
EntferneDoppelZeichen
EntferneMehrfachZeichen
KillDupeChars
...