• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi 字符串查找替换函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.       提取字符串中指定子字符串前的字符串

 

Function Before( Src:string ; S:string ): string ;
  Var
    F: Word ;
  begin
    F:= POS(Src,S) ;
    if F=0 then
      Before := S
     else
      Before := COPY(S,1,F-1) ;
  end ;

 

 

eg: Before(\'123\',\'helloworld_123\')  返回结果:helloworld_

 

2.       提取字符串中指定子字符串后的字符串

 

function After(Src: string; S: string):string;
  var
    F: Word;
  begin
    F:= Pos(Src, S);
    if F = 0 then
      After:= \'\'
    else
      After:= Copy(S, F+Length(Src), Length(S));
  end;

 

3.       Delphi 替换函数

 

procedure Replace(var s:string;const SourceChar:pchar;const RChar:pchar);
  //第一个参数是原串,第二个是模式串,第三个是替换串
  var
    ta,i,j:integer;
    m,n,pn,sn:integer;
    SLen,SCLen,RCLen:integer;//SLen表示原串的长度,SCLen表示模式传的长度,RCLen表示替换串的长度
    IsSame:integer;
    newp:array of char;//用来保存替换后的字符数组
  begin
    SLen:=strlen(pchar(s));SCLen:=strlen(SourceChar);RCLen:=strlen(RChar);
    j:=pos(string(SourceChar),s);
    s:=s+chr(0);ta:=0;i:=j;
    while s[i]<>chr(0) do //这个循环用ta统计模式串在原串中出现的次数
    begin
      n:=0;IsSame:=1;
    for m:=i to i+SCLen-1 do
      begin
        if m>SLen then begin
          IsSame:=0;break;
        end;
        if s[m]<>sourceChar[n] then begin
          IsSame:=0;break;
        end;
        n:=n+1;
      end;
      if IsSame=1 then begin
        ta:=ta+1;i:=m;
      end
      else
        i:=i+1;
    end;
    if j>0 then
    begin
      pn:=0;sn:=1;
      setlength(newp,SLen-ta*SCLen+ta*RCLen+1);//分配newp的长度,+1表示后面还有一个#0结束符
      while s[sn]<>chr(0) do //主要循环,开始替换
      begin
        n:=0;IsSame:=1;
        for m:=sn to sn+SCLen-1 do //比较子串是否和模式串相同
        begin
          if m>SLen then begin IsSame:=0;break; end;
          if s[m]<>sourceChar[n] then begin IsSame:=0;break; end;
          n:=n+1;
        end;
        if IsSame=1 then//相同
        begin
          for m:=0 to RCLen-1 do
          begin
            newp[pn]:=RChar[m];pn:=pn+1;
          end;
          sn:=sn+SCLen;
        end
        else
        begin //不同
          newp[pn]:=s[sn];
          pn:=pn+1;sn:=sn+1;
        end;
      end;
      newp[pn]:=#0;
      s:=string(newp); //重置s,替换完成!
    end;
  end;

 

4.       Delphi StringReplace() 替换字符串的用法

 

str:= \'{"UserName":"helloworld","UserPass":"helloworld_123","UserEmail":"[email protected]"}\';
  str:= StringReplace(str,\'"\',\'\"\',[rfReplaceAll]);
  StringReplace(源字符串,\'被替换字符\',\'替换后字符\',[rfReplaceAll]);

 

 

5.       查找字符串中指定字符及字符串最后一次出现的位置

 

function RightPosEx(const Substr,S: string): Integer;
  var
    iPos: Integer;
    TmpStr: string;
    i,j,len: Integer;
    PCharS,PCharSub: PChar;
  begin
    PCharS:=PChar(s); //将字符串转化为PChar格式 
    PCharSub:=PChar(Substr);
    Result:=0;
    len:=length(Substr);
    for i:=0 to length(S)-1 do begin
      for j:=0 to len-1 do begin
        if PCharS[i+j]<>PCharSub[j] then break;
      end;
      if j=len then Result:=i+1;
    end;
  end;

 

调用方式:RightPosEx(‘\’,’123456\7\’);

 

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap