我想知道如何从一个字符串中删除数字。我尝试使用StringReplace函数,但我不知道如何告诉函数我想替换数字。
这是我尝试的代码:
这是我尝试的代码:
StringReplace(mString, [0..9], '', [rfReplaceAll, rfIgnoreCase]);
简单而有效。可以优化,但作为起点应该可以满足您的需求:
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;
TStringBuilder
来避免在追加字符时进行不必要的内存重新分配:SB := TStringBuilder.Create(Length(aString));... SB.Append(C); ... Result := SB.ToString; SB.Free;
这类似于 Wouter 回答中的概念,只是使用了一个类包装器。 - Remy Lebeau相当迅速的原地版本。
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;
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;
如果不必要,不要浪费宝贵的CPU周期。
function RemoveNonAlpha(srcStr : string) : string;
const
CHARS = ['0'..'9'];
var i : integer;
begin
result:='';
for i:=0 to length(srcStr) do
if (srcstr[i] in CHARS) then
result:=result+srcStr[i];
end ;
edit2.text:=RemoveNonAlpha(edit1.text);
我厌倦了寻找已经构建好的函数,所以我创建了自己的函数:
function RemoveNumbers(const AValue: string): string;
var
iCar : Integer;
mBuffer : string;
begin
mBuffer := AValue;
for iCar := Length(mBuffer) downto 1 do
begin
if (mBuffer[iCar] in ['0'..'9']) then
Delete(mBuffer,iCar,1);
end;
Result := mBuffer;
end;
for ... downto
)来解决此问题。只需记住,string
中的字符从 1
开始索引,而不是从 0
开始。 - Andriy MStringReplace不接受集合作为第二个参数。也许有更合适的方法,但这个方法可行:
StringReplace(mString, '0', '', [rfReplaceAll, rfIgnoreCase]);
StringReplace(mString, '1', '', [rfReplaceAll, rfIgnoreCase]);
StringReplace(mString, '2', '', [rfReplaceAll, rfIgnoreCase]);
等等。