如何删除 Delphi 个字母组成的字符串中的数字

How to delete numbers in the string of Delphi letters

我有一个字符串,我设置了选择字母的坐标,但有时它们会混淆,我问的是坐标和数字,如果 '105DYUDXB28DYU13' 已经完成了,我该怎么做'DYUDXBDYU'

tmpT.Put:=Trim(MidStr(S,8,6))+Trim(MidStr(S,37,3));

性能较好的方案如下(uses 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;

这个函数使用了Delphi7之后引入的一些语言和库特性,为了让这个在Delphi7中工作,你需要稍微重写一下:

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;

细则: TCharHelper.IsDigit 可识别 Unicode,因此它将 return true 用于所有 Unicode 数字。例如,它将 return true for

  • ٣ (U+0663: 阿拉伯-印度数字三),
  • ੪ (U+0A6A: GURMUKHI 数字四),
  • ௫(U+0BEB:泰米尔数字五),
  • ៥(U+17E5:高棉数字五),以及
  • ᠗ (U+1817: 蒙古文数字七).

如果您只想将字符 '0'..'9' 视为数字,您可以使用现代版本的 Delphi 7 测试:

if not CharInSet(AString[i], ['0'..'9']) then

还使用过程和 var 参数编写代码:

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.