我有一个包含一些数据的WideString变量,但是当字符串被分配了一些额外的空值时,在数据中或多或少的随机位置添加.我现在需要从变量中删除这些空值.如果它是一个字符串我会检查每个Char以查看Char(x)= 0但是因为这是一个WideString我不认为这个工作?我怎样才能最好地解决这些问题呢?
我正在使用Delphi 2006
您所看到的可能不是空字符.它们可能只是字符的高八位,代码点值小于256.
如果你的字符串中确实有空字符,那么你应该做的第一件事是弄清楚它们是如何到达那里的.你的程序中可能存在一个错误,如果他们不应该在那里.
如果生成字符串的代码没有错误,并且您仍然有不需要的空字符,那么您可以相当容易地删除它们.从字符串中删除东西的常用方法是使用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;
Run Code Online (Sandbox Code Playgroud)
但是这可能会多次重新分配字符串(每个空字符一次).为避免这种情况,您可以就地填充字符串:
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;
Run Code Online (Sandbox Code Playgroud)
这些函数适用于任何Delphi的字符串类型; 只需更改参数类型.
| 归档时间: |
|
| 查看次数: |
3885 次 |
| 最近记录: |