Delphi中的StringReplace函数是SysUtils单元中自带的函数:
type TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase); function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
rfReplaceAll:全部置換,rfIgnoreCase:勿略大小寫,该函数使用上,全部替换功能不好用。可能是替换的参数为String,针对英文字符的。为此,自己编写一个替换字符串函数,使用widestring,很实用,源码如下:
Delphi7代码:
function TForm1.ReplaceStr(Const S,sOld,sNew:WideString; var T:Integer):WideString; // 原文本 被替换字符 替换字符 替换次数 返回文本 var sResult,sTemp:widestring; i,l,k:Integer; begin Result := ''; L:=Length(sOld); sResult:=''; k:=0; T:=0; // 记录已处理长度 for i:=1 to Length(S) do begin if i>=K then begin sTemp:=Copy(S,i,L); if sTemp=sOld then begin T:=T+1; sResult:=sResult+sNew; K:=i+L; end else begin sResult:=sResult+Copy(S,i,1); end; end; end; Result := sResult; end; 
Delphi XE(Delphi2010以上)代码( 将wideString 改为 String即可 )
function TForm1.ReplaceStr(Const S,sOld,sNew:String; var T:Integer):String; // 原文本 被替换字符 替换字符 替换次数 返回文本 var sResult,sTemp:string; i,l,k:Integer; begin Result := ''; L:=Length(sOld); sResult:=''; k:=0; T:=0; // 记录已处理长度 for i:=1 to Length(S) do begin if i>=K then begin sTemp:=Copy(S,i,L); if sTemp=sOld then begin T:=T+1; sResult:=sResult+sNew; K:=i+L; end else begin sResult:=sResult+Copy(S,i,1); end; end; end; Result := sResult; end; 
调用代码:
procedure TForm1.Button42Click(Sender: TObject); var S,S1,S2,S3:widestring; k:Integer; begin S1:=Edit1.Text; S2:=Edit2.Text; s:=Memo1.Text; Memo1.Text:=ReplaceStr(Memo1.Text,S1,S2,k); ShowMessage('替换次数:'+IntToStr(k)); end;
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END