zoukankan      html  css  js  c++  java
  • [重点]delphi删除部分字符串(不区分大小写)

    type
    TDelFlags = set of (dfDelBefore, dfDelAfter);

    //删除ms字符串中endstr子字符串前面或后面的部分字符串

    procedure Delstr(var ms: String; endstr: String; Flags: TDelFlags;
    bself: Boolean = True);
    var
    l: Integer;
    begin
    l := length(endstr);
    if pos(AnsiLowercase(endstr), AnsiLowercase(ms))=0 then
    begin
    exit;
    end;

    if dfDelBefore in Flags then
    begin
    if bself then
    Delete(ms, 1, pos(AnsiLowercase(endstr), AnsiLowercase(ms)) + l - 1)
    else
    Delete(ms, 1, pos(AnsiLowercase(endstr), AnsiLowercase(ms)) - 1)
    end
    else
    begin
    if bself then
    Delete(ms, pos(AnsiLowercase(endstr), AnsiLowercase(ms)), length(ms))
    else
    Delete(ms, pos(AnsiLowercase(endstr), AnsiLowercase(ms)) + l, length(ms))
    end;
    end;

    //从src主字符串中截取两个字符串(str1和str2)之间的部分字符串

    function GetCenterStr(src, str1, str2: string): string;

    var
    i, i2, i3: integer;
    begin
    i := 0;
    i2 := 0;
    i3 := 0;
    Delstr(src, str1, [dfDelBefore]);
    i := pos(AnsiLowercase(str1), AnsiLowercase(src));
    i3 := pos(AnsiLowercase(str2), AnsiLowercase(src));
    result := copy(src, i2 + 1, i3 - i2 - 1);
    end;

     /////////////////////// Delstr函数的升级版如下 ////////////////////////////

    function fastStrCopy(S:string;Index:integer;count:integer):string;
    var
    sLen: Integer;
    begin
    //此函数类似copy函数,但在拷贝大量字符串时比较copy函数的效率高很多。
    Result:=S;
    {
    拷贝全部字符串
    SetLength(Result,length(S));
    MoveMemory(@Result[1],@S[1],bytelength(S));
    }

    //拷贝部分字符串
    sLen:=0;
    sLen:=length(S);
    if(sLen<Index+count) then count:=sLen-Index+1;
    SetLength(Result,count);
    MoveMemory(@Result[1],@S[Index],count*sizeof(widechar));

    end;

    function FastStrCopy2(S: String; Index: Integer; Count: Integer): String;
    var
    p: PChar;
    buf: LPCWSTR;
    begin
    p := PChar(S);
    getMem(buf, bytelength(s));
    try
    inc(p, Index - 1);

    //lstrcpyn 复制字符串, 同时指定要复制的长度
    lstrcpyn(buf, p, Count + 1);
    Result := String(buf);
    finally
    freemem(buf);
    end;
    end;


    type
    TDelFlags = set of (dfDelBefore, dfDelAfter);


    function Delstr(var ms: String; endstr: String; Flags: TDelFlags;
    bself: Boolean = True): String;
    var
    l: Integer;
    begin
    l := length(endstr);
    if dfDelBefore in Flags then
    begin
    if bself then
    begin
    Result := fastStrCopy(ms, 1, pos(endstr, ms) + l - 1);
    Delete(ms, 1, pos(endstr, ms) + l - 1);
    end
    else
    begin
    Result := fastStrCopy(ms, 1, pos(endstr, ms) - 1);
    Delete(ms, 1, pos(endstr, ms) - 1);
    end;
    end
    else
    begin
    if bself then
    begin
    Result := fastStrCopy(ms, pos(endstr, ms), length(ms));
    Delete(ms, pos(endstr, ms), length(ms));
    end
    else
    begin
    Result := fastStrCopy(ms, pos(endstr, ms) + l, length(ms));
    Delete(ms, pos(endstr, ms) + l, length(ms));
    end;
    end;
    end;

  • 相关阅读:
    在终端聊天
    Vue双向数据绑定的原理
    手动封装on,emit,off
    浅谈Vue中组件传值的几种方式
    常见的一些性能优化的小方法
    常见的一些JS兼容问题
    移动布局的方法
    移动布局的方法
    快速、高效的学习vuex
    移动端300ms延迟原因及解决方案
  • 原文地址:https://www.cnblogs.com/yzryc/p/delstring.html
Copyright © 2011-2022 走看看