Also das wäre mein Ansatz:
Delphi-Quellcode:
uses System.SysUtils, System.Character;
type
IStringManipulator<T> = interface
['{F898C39A-F08E-452B-8948-343AC92C77A3}']
function manipulate(const what: String): T;
end;
TSpaceZapper = class(TInterfacedObject, IStringManipulator<String>)
protected var
stringBuilder: TStringBuilder;
characterPredicate: TPredicate<Char>;
public
constructor Create();
destructor Destroy(); override;
// IStringManipulator<String>
function manipulate(const what: String): String;
end;
constructor TSpaceZapper.Create();
begin
inherited Create();
stringBuilder := TStringBuilder.Create();
characterPredicate :=
function(item: Char): Boolean
begin
Result := not item.IsWhiteSpace();
end;
end;
destructor TSpaceZapper.Destroy();
begin
stringBuilder.Destroy();
inherited;
end;
function TSpaceZapper.manipulate(const what: String): String;
var
containedChar: Char;
begin
stringBuilder.Clear();
for containedChar in what do
if characterPredicate(containedChar) then
stringBuilder.Append(containedChar);
Result := stringBuilder.ToString();
end;
Ich finde meinen Ansatz total toll, denn er ist total einfach zu benutzen:
Delphi-Quellcode:
var
myElaborateStringManipulator: IStringManipulator<
String>;
begin
try
myElaborateStringManipulator := TSpaceZapper.Create();
WriteLn( myElaborateStringManipulator.manipulate('
Hallo Welt ').QuotedString() );
except
on E:
Exception do Writeln(E.ClassName, '
: ', E.
Message);
end;
end.
Nein, ernsthaft. Ich wollte nur einwerfen dass ein Vergleich mit Anführungszeichen, Leertaste drücken, Anführungszeichen eine Menge anderer "Whitespaces" nicht erwischt.