代码之家  ›  专栏  ›  技术社区  ›  AviD

在Delphi2006中从WideString中删除空字符

  •  4
  • AviD  · 技术社区  · 14 年前

    我有一个WideString变量,它包含一些数据,但是当字符串被分配了一些额外的空值时,在数据中或多或少的随机位置添加了这些空值。我现在需要从变量中去掉这些空值。如果它是一个字符串,我会检查每个字符,看看字符(x)=0,但由于这是一个宽字符串,我不认为这是工作?我怎样才能最好地去掉这些?

    我用的是Delphi2006

    2 回复  |  直到 14 年前
        1
  •  8
  •   Rob Kennedy    14 年前

    如果字符串中确实存在不应该存在的空字符,那么首先应该弄清楚它们是如何到达的。如果你的程序在不应该出现的时候出现了错误,那么它可能就在你的程序中。

    Delete 标准功能。可以使用 # 编译器通常可以判断它是需要表示AnsiChar还是WideChar。

    procedure RemoveNullCharacters(var s: WideString);
    var
      i: Integer;
    begin
      i := 1;
      while i < Length(s) do
        if s[i] = #0 then
          Delete(s, i, 1)
        else
          Inc(i);
    end;
    

    但这可能会多次重新分配字符串(每个空字符一次)。为了避免这种情况,可以将字符串打包到位:

    procedure RemoveNullCharacters(var s: WideString);
    var
      i, j: Integer;
    begin
      j := 0;
      for i := 1 to Length(s) do
        if s[i] <> #0 then begin
          Inc(j);
          s[j] := s[i];
        end;
      if j < Length(s) then
        SetLength(s, j);
    end;
    

        2
  •  6
  •   Ken White    14 年前

    这些不是额外的空值。它们是绳子的一部分。

    你可以从尼克·霍奇斯开始 articles