zoukankan      html  css  js  c++  java
  • delphi 字符串查找替换函数 转

     

     

      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":"lovecode@163.com"}';

      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\’);

  • 相关阅读:
    Permutation Test 置换检验
    计算机会议排名等级
    国际顶级计算机会议
    机器学习中的范数规则化 L0、L1与L2范数 核范数与规则项参数选择
    岭回归(Ridge Regression)
    popupWindow使用timePicker时点击出现闪屏问题的解决办法
    Java:单例模式的七种写法
    JSONObject遍历获取键值方法合并两个JSONObject
    解决android studio上“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65935”问题
    解决同时共用MOB公司的shareSDK和SMSSDK的冲突问题
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/2574739.html
Copyright © 2011-2022 走看看