如何从StringList中删除空格?

NOP*_*NOP 5 delphi delphi-7

我正在加载一个文本文件(其中包含许多行,一些包含空格或制表符)到StringList.如何从整个StringList中删除空格(不包括换行符)?

Dav*_*nan 17

这是一个粗略的解决方案,假设选项卡和空格是唯一的空格字符:

tmp := Strings.Text;
tmp := StringReplace(tmp, #9, '', [rfReplaceAll]);
tmp := StringReplace(tmp, #32, '', [rfReplaceAll]);
Strings.Text := txt;
Run Code Online (Sandbox Code Playgroud)

这是一个更高级的版本,可以检测任何空格:

function RemoveWhiteSpace(const s: string): string;
var
  i, j: Integer;
begin
  SetLength(Result, Length(s));
  j := 0;
  for i := 1 to Length(s) do begin
    if not TCharacter.IsWhiteSpace(s[i]) then begin
      inc(j);
      Result[j] := s[i];
    end;
  end;
  SetLength(Result, j);
end;
...
Strings.Text := RemoveWhiteSpace(Strings.Text);
Run Code Online (Sandbox Code Playgroud)

你需要一个Unicode版本的Delphi,你需要使用该Character单元.

如果您使用的是非Unicode版本的Delphi,那么您可以将if替换为:

if not (s[i] in [#9,#32]) then begin
Run Code Online (Sandbox Code Playgroud)

  • +1用于预分配字符串(因为每个人都应该这样做,但事实并非如此).(我相信你会纠正语法错误.) (3认同)
  • @David,任何体面的程序员都应该. (2认同)