Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: Leerzeichen in einem String rauslöschen

  Alt 21. Nov 2014, 20:24
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.
  Mit Zitat antworten Zitat