使用Character
):function RemoveNumbers(const AString: string): string;
var
i, j: integer;
begin
SetLength(result, AString.Length);
j := 0;
for i := 1 to AString.Length do
if not AString[i].IsDigit then
begin
inc(j);
result[j] := AString[i];
end;
SetLength(result, j);
end;
该函数使用Delphi 7之后引入的几个语言和库特性。要在Delphi 7中使其正常工作,您需要稍微重新编写它:
function RemoveNumbers(const AString: string): string;
var
i, j: integer;
begin
SetLength(result, Length(AString));
j := 0;
for i := 1 to Length(AString) do
if not (AString[i] in ['0'..'9']) then
begin
inc(j);
result[j] := AString[i];
end;
SetLength(result, j);
end;
if not CharInSet(AString[i], ['0'..'9']) then
IsDigit
将会把不仅仅是0..9的字符视为数字。但所需的语义取决于实际情况,我无法了解任何详细信息。(而且我认为在SO上提供一个“现代”的解决方案和适用于指定Delphi版本的解决方案是一个好的做法,以便其他可能看到该问题的人受益。) - Andreas Rejbrand同时使用过程和变量参数编写代码:
procedure RemoveNumbers(var Text: String);
var
Index: Integer;
begin
for Index := Length(Text) downto 1 do
if Text[Index] in ['0'..'9']
then Text := Copy(Text, 1, Index - 1) + Copy(Text, Index + 1, Length(Text) - Index);
end;
var
Text: String;
begin
Text := '105DYUDXB28DYU13';
RemoveNumbers(Text);
WriteLn(Text);
end.