【问题标题】:How do I remove whitespace from a StringList?如何从 StringList 中删除空格?
【发布时间】:2011-02-22 13:42:51
【问题描述】:

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

【问题讨论】:

  • 如果删除它们,它将是文本文件的一个大字符串。你想用那个大字符串做什么
  • 啊,我不需要那个,有没有办法逐行删除空格? :S

标签: delphi delphi-7


【解决方案1】:

这是一个粗略的解决方案,假设制表符和空格是唯一的空白字符:

tmp := Strings.Text;
tmp := StringReplace(tmp, #9, '', [rfReplaceAll]);
tmp := StringReplace(tmp, #32, '', [rfReplaceAll]);
Strings.Text := txt;

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

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);

您需要一种 Unicode 版本的 Delphi,并且需要使用 Character 单位。

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

if not (s[i] in [#9,#32]) then begin

【讨论】:

  • 我正在使用 delphi7 是否有机会在 delphi 7 中使用 removewhitspace 功能?
  • +1 用于预分配字符串(每个人都应该这样做,但事实并非如此)。 (我相信你会纠正语法错误。)
  • @david 谢谢先生,它工作得很好,但你确实犯了错误,你使用了程序而不是函数 :)
  • @NOP 谢谢,现在修好了,我只是在答案框中写了它,没有费心编译它,因此出现了两个错误!内存分配和索引是无懈可击的 - 这是我专注的一点!
  • @David,任何体面的程序员都应该这样做。
【解决方案2】:

根据有多少文本,您可以对整个文本使用 StringReplace() 函数。我确定这不是最有效的方法,但应该可以。

例如

var tmpString : String;

    Memo1.LoadFromFile(Filename);    
    tmpString := StringReplace(memo1.Text, #9, '',[rfReplaceAll]);

然后将 tmpString 加载到字符串列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 2022-12-16
    • 2013-01-18
    相关资源
    最近更新 更多