从字符串中删除数字

Cha*_*XIV 9 delphi string replace

我想知道如何从String中删除数字.我尝试使用StringReplace,我不知道如何告诉函数我想要替换数字.

这是我试过的:

StringReplace(mString, [0..9], '', [rfReplaceAll, rfIgnoreCase]);
Run Code Online (Sandbox Code Playgroud)

Nic*_*ges 13

简单但有效.可以优化,但应该为您提供您需要的开始:

function RemoveNumbers(const aString: string): string;
var
  C: Char;
begin
  Result := '';
  for C in aString do begin
      if not CharInSet(C, ['0'..'9']) then
      begin
        Result := Result + C;
      end;
    end;
end;
Run Code Online (Sandbox Code Playgroud)

  • 这必须是最简单的方法,也是最短的代码. (2认同)

MBo*_*MBo 5

相当快速的inplace版本.

procedure RemoveDigits(var s: string);
var
  i, j: Integer;
  pc: PChar;
begin
  j := 0;
  pc := PChar(@s[1]);
  for i := 0 to Length(s) - 1 do
    if pc[i] in ['0'..'9'] then 
               //if CharInSet(pc[i], ['0'..'9']) for Unicode version
      Inc(j)
    else
      pc[i - j] := pc[i];
  SetLength(s, Length(s) - j);
end;
Run Code Online (Sandbox Code Playgroud)

  • +1用于原位替换,如果原始字符串很大,则此类方法的内存效率要高得多.任何str:= str +?或者其他生成临时字符串的方法可以非常快速地构建一个大的内存占用空间,当在大型数据集(几兆字节)上使用简单的转换例程(十六进制到二进制,base64等)时,我会遇到这种情况. (3认同)

Wou*_*ick 5

这与Nick的版本具有相同的输出,但这是短字符串的3倍以上.文本越长,差异越大.

function RemoveNumbers2(const aString: string): string;
var
  C:Char; Index:Integer;
begin
  Result := '';
  SetLength(Result, Length(aString));
  Index := 1;
  for C in aString do
    if not CharInSet(C, ['0' .. '9']) then
    begin
      Result[Index] := C;
      Inc(Index);
    end;
  SetLength(Result, Index-1);
end;
Run Code Online (Sandbox Code Playgroud)

如果您不必浪费宝贵的CPU周期,请不要浪费.