zoukankan      html  css  js  c++  java
  • Delphi中常用字符串处理函数

    1.copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回.
    假设str为'abcdef',copy(str,3,2)='cd',copy(str,4,10)='def'
    2.concat(str1,str2{,strn}) 把各自变量连接起来,返回连接后的字符串(长度不能超过255)
    3.length(str) 返回str的字符个数,即其长度.
    4.pos(obj,target) 在target字符串中找出第一个出现obj的第一个字符位置,如果找不到,返回0.
    5.AnsiStrLastChar('你好')结果是“好”。如果有半个汉字出现,返回这半个汉字。二者字符串长度分别为2和1。
    6.CompareStr - 区分大小写
    7.CompareText - 不区分大小写
    8.StringReplace(const S, OldPattern, NewPattern: string;Flags: TReplaceFlags): string;
    字符串替换函数,需要引用SysUtils单元
    rfReplaceAll:全部替换
    rfIgnoreCase:忽略大小写
    使用方法Lg:
      str:='01231142211 :655767';//需要把:替换成----
    s:=StringReplace(str,':','----',[rfReplaceAll]);
    For Example:

    var
    aStr: String;
    begin
    aStr := 'This is a book, not a pen!';
    ShowMessage(StringReplace (aStr, 'a', 'two', [])); //This is two book, not a pen!只替换了第一个符合的字
    ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));
    //This is two book, not two pen!替换了所有符合的字
    aStr := 'This is a book, not A pen!';
    ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll])); //This is two book, not A pen!只替换了符合的字(小写a)
    ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll, rfIgnoreCase])); //This is two book, not two pen!不管大小写替换了所有符合的字
    end;

    9.delete 是删除一个 字符串中的 某部分字符
    用法是 delete(str,//被删除的字符串
    index,//从第几个字符开始删除
    count //删除几个
    );
    Delete(S, 2, 2); 就是从S中的第二个开始删除,删除2个字符即2、3.所以结果是145.
    ////////////////////////////////////////////////////////
    LEFTSTR, MIDSTR, RIGHTSTR的介绍
    这几个函数都包含在StrUtils中,所以需要uses StrUtils;
    假设字符串是 Dstr := ’Delphi is the BEST’, 那么
    LeftStr(Dstr, 5) := ’Delph’
    MidStr(Dstr, 6, 7) := ’i is th’
    RightStr(Dstr, 6) := ’e BEST’

    8.{判断字符是否是数字}
    function IsDigit(ch: char): boolean;
    begin
    Result := ch in ['0'..'9'];
    end;

    9、{判断字符是否是大写字符}
    function IsUpper(ch: char): boolean;
    begin
    Result := ch in ['A'..'Z'];
    end;
    10、{判断字符是否是小写字符}
    function IsLower(ch: char): boolean;
    begin
    Result := ch in ['a'..'z'];
    end;
    11、{转换为大写字符}
    function ToUpper(ch: char): char;
    begin
    Result := chr(ord(ch) and $DF);
    end;
    12、{转换为小写字符}
    function ToLower(ch: char): char;
    begin
    Result := chr(ord(ch) or $20);
    end;
    { Capitalizes first letter of every word in s }

    function Proper(const s: string): string;
    var
    i: Integer;
    CapitalizeNextLetter: Boolean;
    begin
    Result := LowerCase(s);
    CapitalizeNextLetter := True;
    for i := 1 to Length(Result) do
    begin
    if CapitalizeNextLetter and IsLower(Result[i]) then
    Result[i] := ToUpper(Result[i]);
    CapitalizeNextLetter := Result[i] = ' ';
    end;
    end;
    ////////////////////////////////////////////////////////////
    13.{返回两个子字符串之间字符的个数}
    Function p2pcount( s, ss1, ss2 : string ): integer;
    var i, j, slen : integer;
    begin
    i := pos( ss1, s );
    j := pos( ss2, s );
    slen := Length(ss2);
    if j >= i then Result := j - i + slen else Result := 0;
    end;
    14.{更快速的字符查询,快40%}
    function ScanStr(ToScan: PChar; Sign: Char):PChar;
    begin
    Result:= nil;
    if ToScan <> nil then
    while (ToScan^ <> #0) do begin
    if ToScan^ = Sign then begin
    Result:= ToScan;
    break;
    end;
    inc(ToScan);
    end;
    end;
    /////////////////////////////
    15.替换字符串中子串的函数,他可以从字符串中找出指定子串,并替换为另一子串。
    function replacing(S,source,target:string):string;
    var site,StrLen:integer;
    begin
    {source在S中出现的位置}
    site:=pos(source,s);
    {source的长度}
    StrLen:=length(source);
    {删除source字符串}
    delete(s,site,StrLen);
    {插入target字符串到S中}
    insert(target,s,site);
    {返回新串}
    replacing:=s;
    end;
    ///////////////////////
    另两个替换字符串中子串的函数
    function repl_substr( sub1, sub2, s: string ): string;
    var i: integer;
    begin
    repeat
    i := pos( sub1, s ) ;
    if i > 0 then begin
    delete( s, i, Length(sub1));
    insert( sub2, s, i );
    end;
    until i < 1;
    Result := s;
    end;
    function ReplaceText(const S,ReplacePiece,ReplaceWith: String):String;
    Var Position: Integer;
    TempStr: String;
    begin
    Position := Pos(ReplacePiece,S);
    if Position > 0 then Begin
    TempStr := S;
    Delete(TempStr,1,Position-1+Length(ReplacePiece));
    Result :=
    Copy(S,1,Position-1)+ReplaceWith+ReplaceText(TempStr,ReplacePiece,ReplaceWith)
    End else Result := S;
    end;
    ////////////////////////
    替换全部子字符串的函数
    function ReplaceSub(str, sub1, sub2: String): String;
    var
    aPos: Integer;
    rslt: String;
    begin
    aPos := Pos(sub1, str);
    rslt := '';
    while (aPos <> 0) do begin
    rslt := rslt + Copy(str, 1, aPos - 1) + sub2;
    Delete(str, 1, aPos + Length(sub1));
    aPos := Pos(sub1, str);
    end;
    Result := rslt + str;
    end;
    /////////////////////////
    在字符串左右填充指定数量的指定字符
    function UT_PadString(inString :string; maxLength :integer; padChar :char;
    left :boolean) :string;
    begin
    result := inString;
    while (Length(result) < maxLength) do
    if (left) then
    result := padChar + result
    else
    result := result + padChar;
    end;
    /////////////////////////////////////
    提取字符串中指定子字符串前的字符串
    Function Before ( string ; Var S:string ) : string ; < /span>
    Var
    F : Word ;
    begin
    F := POS (Src,S) ;
    if F=0 then
    Before := S
    else
    Before := COPY(S,1,F-1) ;
    end ;
    //////////////////////////////////
    提取字符串中指定子字符串后的字符串
    Function After ( string ; Var S:string ) : string ; < /span>
    Var
    F : Word ;
    begin
    F := POS (Src,S) ;
    if F=0 then
    After := ''
    else
    After := COPY(S,F+length(src),length(s)) ;
    end ;
    ////////////////////////////////////
    判断字符串是否可以转换为整数
    function IsIntStr(const S: string): boolean;
    begin
    Result:=StrToIntDef(S,0)=StrToIntDef(S,1);
    end;
    //////////////////////////////////////
    从字符串中删除指定字符串
    procedure RemoveInvalid(what, where: string): string;
    var
    tstr: string;
    begin
    tstr:=where;
    while pos(what, tstr)>0 do
    tstr:=copy(tstr,1,pos(what,tstr)-1) +
    copy(tstr,pos(what,tstr)+length(tstr),length(tstr));
    Result:=tstr;
    end;
    用法:
    NewStr:=RemoveInvalid('<invalid>','This <invalid> is my string and I wan to
    remove the word <invalid>');
    ///////////////////////////////////////////
    根据某个字符分割字符串的函数
    procedure SeparateTerms(s : string;Separator : char;Terms : TStringList);
    { This browses a string and divide it into terms whenever the given
    separator is found. The separators will be removed }
    var
    hs : string;
    p : integer;
    begin
    Terms.Clear; // First remove all remaining terms
    if Length(s)=0 then // Nothin' to separate
    Exit;
    p:=Pos(Separator,s);
    while P<>0 do
    begin
    hs:=Copy(s,1,p-1); // Copy term
    Terms.Add(hs); // Add to list
    Delete(s,1,p); // Remove term and separator
    p:=Pos(Separator,s); // Search next separator
    end;
    if Length(s)>0 then
    Terms.Add(s); // Add remaining term
    end;
    ==========
    = 用 法
    ==========
    var
    Terms : TStringList;
    i : integer;
    const
    TestStr = '1st term;2nd term;3rd term';
    begin
    Terms:=TStringList.Create;
    SeparateTerms(TestStr,';',Terms);
    for i:=0 to terms.Count-1 do
    ShowMessage(Terms.Strings[i]);
    Terms.Free;
    end;
    /////////////////////////////
    根据一组字符分割字符串的函数
    type
    Charset = set of Char;
    var
    f : Text;
    s : String;
    procedure WriteStringSplitted(var s: String; Separators: Charset);
    var
    a,e : Integer; {anfang und ende des w鰎tchens}
    begin
    a := 1;
    for e := 1 to Length(s) do
    if s[e] in Separators then begin
    WriteLn(Copy(s, a, e-a));
    a := e + 1;
    end;
    WriteLn(Copy(s, a, e-a+1));
    end;
    begin
    Assign(f, 'c:/dingsbums/text.txt');
    Reset(f);
    while not EOF(f) do begin
    ReadLn(f,s);
    WriteStringSplitted(s, [':', ',']);
    end;
    Close(f);
    end.
    //////////////////////////////////////////////////
    {===============================================================}
    { 函数 : RESULTSTRING = HexToBin(HEXSTRING)
    { 目的 : 把十六进制字符串转换为二进制字符串
    {
    {===============================================================}
    { 函数 : RESULTINTEGER = HexCharToInt(HEXCHAR)
    { 目的 : 转换一个十六进制字符为整数
    {===============================================================}
    { 函数 : RESULTSTRING = HexCharToBin(HEXCHAR)
    { 目的 : 转换一个十六进制字符为二进制字符串
    {===============================================================}
    { 函数 : RESULTINTEGER = Pow(BASE,POWER)
    { 目的 : 指数函数
    {===============================================================}
    { 函数 : RESULTINTEGER = BinStrToInt(BINSTRING)
    { 目的 : 把二进制字符串转换为整数
    {===============================================================}
    { 函数 : RESULTSTRING = DecodeSMS7Bit (PDUSTRING)
    { 目的 : 解码一个7-bit SMS (GSM 03.38) 为ASCII码
    {===============================================================}
    { 函数 : RESULTSTRING = ReverseStr (SOURCESTRING)
    { 目的 : 反转一个字符串
    {===============================================================}
    unit BinHexTools;
    interface
    function HexToBin(HexNr : string): string;
    function HexCharToInt(HexToken : char):Integer;
    function HexCharToBin(HexToken : char): string;
    function pow(base, power: integer): integer;
    function BinStrToInt(BinStr : string) : integer;
    function DecodeSMS7Bit(PDU : string):string;
    function ReverseStr(SourceStr : string) : string;
    implementation
    uses sysutils, dialogs;
    function HexCharToInt(HexToken : char):Integer;
    begin
    {if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32);
    { use lowercase aswell }
    Result:=0;
    if (HexToken>#47) and (HexToken<#58) then { chars 0....9 }
    Result:=Ord(HexToken)-48
    else if (HexToken>#64) and (HexToken<#71) then { chars A....F }
    Result:=Ord(HexToken)-65 + 10;
    end;
    function HexCharToBin(HexToken : char): string;
    var DivLeft : integer;
    begin
    DivLeft:=HexCharToInt(HexToken); { first HEX->BIN }
    Result:='';
    { Use reverse dividing }
    repeat { Trick; divide by 2 }
    if odd(DivLeft) then { result = odd ? then bit = 1 }
    Result:='1'+Result { result = even ? then bit = 0 }
    else
    Result:='0'+Result;
    DivLeft:=DivLeft div 2; { keep dividing till 0 left and length = 4 }
    until (DivLeft=0) and (length(Result)=4); { 1 token = nibble = 4 bits }
    end;
    function HexToBin(HexNr : string): string;
    { only stringsize is limit of binnr }
    var Counter : integer;
    begin
    Result:='';
    for Counter:=1 to length(HexNr) do
    Result:=Result+HexCharToBin(HexNr[Counter]);
    end;
    function pow(base, power: integer): integer;
    var counter : integer;
    begin
    Result:=1;
    for counter:=1 to power do
    Result:=Result*base;
    end;
    function BinStrToInt(BinStr : string) : integer;
    var counter : integer;
    begin
    if length(BinStr)>16 then
    raise ERangeError.Create(#13+BinStr+#13+
    'is not within the valid range of a 16 bit binary.'+#13);
    Result:=0;
    for counter:=1 to length(BinStr) do
    if BinStr[Counter]='1' then
    Result:=Result+pow(2,length(BinStr)-counter);
    end;
    function DecodeSMS7Bit(PDU : string):string;
    var OctetStr : string;
    OctetBin : string;
    Charbin : string;
    PrevOctet: string;
    Counter : integer;
    Counter2 : integer;
    begin
    PrevOctet:='';
    Result:='';
    for Counter:=1 to length(PDU) do
    begin
    if length(PrevOctet)>=7 then { if 7 Bit overflow on previous }
    begin
    if BinStrToInt(PrevOctet)<>0 then
    Result:=Result+Chr(BinStrToInt(PrevOctet))
    else Result:=Result+' ';
    PrevOctet:='';
    end;
    if Odd(Counter) then { only take two nibbles at a time }
    begin
    OctetStr:=Copy(PDU,Counter,2);
    OctetBin:=HexToBin(OctetStr);
    Charbin:='';
    for Counter2:=1 to length(PrevOctet) do
    Charbin:=Charbin+PrevOctet[Counter2];
    for Counter2:=1 to 7-length(PrevOctet) do
    Charbin:=OctetBin[8-Counter2+1]+Charbin;
    if BinStrToInt(Charbin)<>0 then Result:=Result+Chr(BinStrToInt(CharBin))
    else Result:=Result+' ';
    PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1);
    end;
    end;
    end;
    function ReverseStr(SourceStr : string) : string;
    var Counter : integer;
    begin
    Result:='';
    for Counter:=1 to length(SourceStr) do
    Result:=SourceStr[Counter]+Result;
    end;
    end.

    转自https://www.cnblogs.com/hhmm99/p/10613708.html

  • 相关阅读:
    欢迎参加MVP主讲的Windows 10开发线上课程
    SharePoint 2013 重复的管理账户错误:已添加项。字典中的关键字 所添加的关键字
    SharePoint 2013 开发——SharePoint Designer 2013工作流
    SharePoint 2013 开发——构建工作流开发环境
    SharePoint 2013 开发——工作流架构
    SharePoint 2013 开发——APP安全模型
    SharePoint 2013 开发——SharePoint APP介绍
    SharePoint 2013 开发——概述
    win32
    hdu2100 26进制加法
  • 原文地址:https://www.cnblogs.com/zyb2016/p/11064047.html
Copyright © 2011-2022 走看看