如何删除Delphi字母串中的数字

时间:2018-05-04 05:50:41

标签: string delphi delphi-7

我有一个字符串,我设置了字母选择的坐标,但有时它们会混淆,我用数字询问坐标,如果例如'105DYUDXB28DYU13'完成了'DYUDXBDYU'我怎么做{{ 1}}

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

enter image description here

2 个答案:

答案 0 :(得分:6)

具有良好性能的解决方案如下(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;

此函数使用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;

精细打印: TCharHelper.IsDigit支持Unicode,因此它将为所有Unicode数字返回true。例如,它将返回true

  • 3(U + 0663:ARABIC-INDIC DIGIT THREE),
  • 4(U + 0A6A:GURMUKHI DIGIT FOUR),
  • 5(U + 0BEB:TAMIL DIGIT FIVE),
  • 5(U + 17E5:KHMER DIGIT FIVE)和
  • ᠗(U + 1817:MONGOLIAN DIGIT SEVEN)。

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

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

答案 1 :(得分:0)

还使用procedure和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.