秦浩凌妈妈 發表於 2019-6-21 13:30:00

Delphi中常用字符串处理函数

<p>1.copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回.<br>假设str为'abcdef',copy(str,3,2)='cd',copy(str,4,10)='def' <br>2.concat(str1,str2{,strn}) 把各自变量连接起来,返回连接后的字符串(长度不能超过255) <br>3.length(str)       返回str的字符个数,即其长度. <br>4.pos(obj,target)   在target字符串中找出第一个出现obj的第一个字符位置,如果找不到,返回0. <br>5.AnsiStrLastChar('你好')结果是“好”。如果有半个汉字出现,返回这半个汉字。二者字符串长度分别为2和1。 <br>6.CompareStr- 区分大小写 <br>7.CompareText - 不区分大小写 <br>8.StringReplace(const S, OldPattern, NewPattern: string;Flags: TReplaceFlags): string;<br>字符串替换函数,需要引用SysUtils单元<br>rfReplaceAll:全部替换 <br>rfIgnoreCase:忽略大小写<br>使用方法Lg:<br>  str:='01231142211 :655767';//需要把:替换成----<br>s:=StringReplace(str,':','----',);<br>For Example:</p>
<p>var<br>aStr: String;<br>begin<br>aStr := 'This is a book, not a pen!';<br>ShowMessage(StringReplace (aStr, 'a', 'two', []));   //This is two book, not a pen!只替换了第一个符合的字<br>ShowMessage(StringReplace (aStr, 'a', 'two', ));<br>//This is two book, not two pen!替换了所有符合的字<br>aStr := 'This is a book, not A pen!';<br>ShowMessage(StringReplace (aStr, 'a', 'two', ));   //This is two book, not A pen!只替换了符合的字(小写a)<br>ShowMessage(StringReplace (aStr, 'a', 'two', ));   //This is two book, not two pen!不管大小写替换了所有符合的字<br>end;</p>
<p>9.delete 是删除一个 字符串中的 某部分字符<br>用法是 delete(str,//被删除的字符串 <br>            index,//从第几个字符开始删除<br>            count //删除几个<br>            );<br>Delete(S, 2, 2); 就是从S中的第二个开始删除,删除2个字符即2、3.所以结果是145. <br>////////////////////////////////////////////////////////<br>LEFTSTR, MIDSTR, RIGHTSTR的介绍<br>这几个函数都包含在StrUtils中,所以需要uses StrUtils; <br>假设字符串是 Dstr := ’Delphi is the BEST’, 那么 <br>LeftStr(Dstr, 5) := ’Delph’ <br>MidStr(Dstr, 6, 7) := ’i is th’ <br>RightStr(Dstr, 6) := ’e BEST’</p>
<p>&nbsp;</p>
<p>8.{判断字符是否是数字} <br>function IsDigit(ch: char): boolean; <br>begin <br>Result := ch in ['0'..'9']; <br>end; </p>
<p>9、{判断字符是否是大写字符} <br>function IsUpper(ch: char): boolean; <br>begin <br>Result := ch in ['A'..'Z']; <br>end; <br>10、{判断字符是否是小写字符} <br>function IsLower(ch: char): boolean; <br>begin <br>Result := ch in ['a'..'z']; <br>end; <br>11、{转换为大写字符} <br>function ToUpper(ch: char): char; <br>begin <br>Result := chr(ord(ch) and $DF); <br>end; <br>12、{转换为小写字符} <br>function ToLower(ch: char): char; <br>begin <br>Result := chr(ord(ch) or $20); <br>end; <br>{ Capitalizes first letter of every word in s } </p>
<p>function Proper(const s: string): string; <br>var <br>i: Integer; <br>CapitalizeNextLetter: Boolean; <br>begin <br>Result := LowerCase(s); <br>CapitalizeNextLetter := True; <br>for i := 1 to Length(Result) do <br>begin <br>    if CapitalizeNextLetter and IsLower(Result) then <br>      Result := ToUpper(Result); <br>    CapitalizeNextLetter := Result = ' '; <br>end; <br>end; <br>//////////////////////////////////////////////////////////// <br>13.{返回两个子字符串之间字符的个数} <br>Function p2pcount( s, ss1, ss2 : string ): integer; <br>var i, j, slen : integer; <br>begin <br>   i := pos( ss1, s ); <br>   j := pos( ss2, s ); <br>   slen := Length(ss2); <br>   if j &gt;= i then Result := j - i + slen else Result := 0; <br>end; <br>14.{更快速的字符查询,快40%} <br>function ScanStr(ToScan: PChar; Sign: Char):PChar; <br>begin <br>Result:= nil; <br>if ToScan &lt;&gt; nil then <br>    while (ToScan^ &lt;&gt; #0) do begin <br>      if ToScan^ = Sign then begin <br>      Result:= ToScan; <br>      break; <br>       end; <br>   inc(ToScan); <br>    end; <br>end; <br>///////////////////////////// <br>15.替换字符串中子串的函数,他可以从字符串中找出指定子串,并替换为另一子串。 <br>function replacing(S,source,target:string):string; <br>var site,StrLen:integer; <br>begin <br>{source在S中出现的位置} <br>site:=pos(source,s); <br>{source的长度} <br>StrLen:=length(source); <br>{删除source字符串} <br>delete(s,site,StrLen); <br>{插入target字符串到S中} <br>insert(target,s,site); <br>{返回新串} <br>replacing:=s; <br>end; <br>/////////////////////// <br>另两个替换字符串中子串的函数 <br>function repl_substr( sub1, sub2, s: string ): string; <br>var i: integer; <br>begin <br>   repeat <br>   i := pos( sub1, s ) ; <br>   if i &gt; 0 then begin <br>       delete( s, i, Length(sub1)); <br>       insert( sub2, s, i ); <br>   end; <br>   until i &lt; 1; <br>   Result := s; <br>end; <br>function ReplaceText(const S,ReplacePiece,ReplaceWith: String):String; <br>Var Position: Integer; <br>    TempStr: String; <br>begin <br>Position := Pos(ReplacePiece,S); <br>if Position &gt; 0 then Begin <br>    TempStr := S; <br>    Delete(TempStr,1,Position-1+Length(ReplacePiece)); <br>    Result := <br>Copy(S,1,Position-1)+ReplaceWith+ReplaceText(TempStr,ReplacePiece,ReplaceWith) <br>End else Result := S; <br>end; <br>//////////////////////// <br>替换全部子字符串的函数 <br>function ReplaceSub(str, sub1, sub2: String): String; <br>    var <br>    aPos: Integer; <br>    rslt: String; <br>begin <br>    aPos := Pos(sub1, str); <br>    rslt := ''; <br>    while (aPos &lt;&gt; 0) do begin <br>      rslt := rslt + Copy(str, 1, aPos - 1) + sub2; <br>      Delete(str, 1, aPos + Length(sub1)); <br>      aPos := Pos(sub1, str); <br>    end; <br>    Result := rslt + str; <br>end; <br>///////////////////////// <br>在字符串左右填充指定数量的指定字符 <br>function UT_PadString(inString :string; maxLength :integer; padChar :char; <br>left :boolean) :string; <br>begin <br>result := inString; <br>while (Length(result) &lt; maxLength) do <br>    if (left) then <br>      result := padChar + result <br>    else <br>      result := result + padChar; <br>end; <br>///////////////////////////////////// <br>提取字符串中指定子字符串前的字符串 <br>Function Before ( string ; Var S:string ) : string ; &lt; /span&gt;<br>Var <br>F : Word ; <br>begin <br>F := POS (Src,S) ; <br>if F=0 then <br>    Before := S <br>   else <br>    Before := COPY(S,1,F-1) ; <br>end ; <br>////////////////////////////////// <br>提取字符串中指定子字符串后的字符串 <br>Function After ( string ; Var S:string ) : string ; &lt; /span&gt;<br>Var <br>F : Word ; <br>begin <br>F := POS (Src,S) ; <br>if F=0 then <br>    After := '' <br>   else <br>    After := COPY(S,F+length(src),length(s)) ; <br>end ; <br>//////////////////////////////////// <br>判断字符串是否可以转换为整数 <br>function IsIntStr(const S: string): boolean; <br>begin <br>Result:=StrToIntDef(S,0)=StrToIntDef(S,1); <br>end; <br>////////////////////////////////////// <br>从字符串中删除指定字符串 <br>procedure RemoveInvalid(what, where: string): string; <br>var <br>tstr: string; <br>begin <br>tstr:=where; <br>while pos(what, tstr)&gt;0 do <br>    tstr:=copy(tstr,1,pos(what,tstr)-1) + <br>       copy(tstr,pos(what,tstr)+length(tstr),length(tstr)); <br>Result:=tstr; <br>end; <br>用法: <br>NewStr:=RemoveInvalid('&lt;invalid&gt;','This &lt;invalid&gt; is my string and I wan to <br>       remove the word &lt;invalid&gt;'); <br>/////////////////////////////////////////// <br>根据某个字符分割字符串的函数 <br>procedure SeparateTerms(s : string;Separator : char;Terms : TStringList); <br>{ This browses a string and divide it into terms whenever the given <br>separator is found. The separators will be removed } <br>var <br>hs : string; <br>p : integer; <br>begin <br>Terms.Clear; // First remove all remaining terms <br>if Length(s)=0 then   // Nothin' to separate <br>    Exit; <br>p:=Pos(Separator,s); <br>while P&lt;&gt;0 do <br>begin <br>    hs:=Copy(s,1,p-1);   // Copy term <br>    Terms.Add(hs);       // Add to list <br>    Delete(s,1,p);       // Remove term and separator <br>    p:=Pos(Separator,s); // Search next separator <br>end; <br>if Length(s)&gt;0 then <br>    Terms.Add(s);      // Add remaining term <br>end; <br>========== <br>= 用法 <br>========== <br>var <br>Terms : TStringList; <br>i : integer; <br>const <br>TestStr = '1st term;2nd term;3rd term'; <br>begin <br>Terms:=TStringList.Create; <br>SeparateTerms(TestStr,';',Terms); <br>for i:=0 to terms.Count-1 do <br>    ShowMessage(Terms.Strings); <br>Terms.Free; <br>end; <br>///////////////////////////// <br>根据一组字符分割字符串的函数 <br>type <br>Charset = set of Char; <br>var <br>f : Text; <br>s : String; <br>procedure WriteStringSplitted(var s: String; Separators: Charset); <br>var <br>a,e : Integer;{anfang und ende des w鰎tchens} <br>begin <br>a := 1; <br>for e := 1 to Length(s) do <br>if s in Separators then begin <br>   WriteLn(Copy(s, a, e-a)); <br>   a := e + 1; <br>end; <br>WriteLn(Copy(s, a, e-a+1)); <br>end; <br>begin <br>Assign(f, 'c:/dingsbums/text.txt'); <br>Reset(f); <br>while not EOF(f) do begin <br>ReadLn(f,s); <br>WriteStringSplitted(s, [':', ',']); <br>end; <br>Close(f); <br>end. <br>////////////////////////////////////////////////// <br>{===============================================================} <br>{ 函数: RESULTSTRING = HexToBin(HEXSTRING) <br>{ 目的   : 把十六进制字符串转换为二进制字符串 <br>{ <br>{===============================================================} <br>{ 函数: RESULTINTEGER = HexCharToInt(HEXCHAR) <br>{ 目的   : 转换一个十六进制字符为整数 <br>{===============================================================} <br>{ 函数: RESULTSTRING = HexCharToBin(HEXCHAR) <br>{ 目的   : 转换一个十六进制字符为二进制字符串 <br>{===============================================================} <br>{ 函数: RESULTINTEGER = Pow(BASE,POWER) <br>{ 目的   : 指数函数 <br>{===============================================================} <br>{ 函数: RESULTINTEGER = BinStrToInt(BINSTRING) <br>{ 目的   : 把二进制字符串转换为整数 <br>{===============================================================} <br>{ 函数: RESULTSTRING = DecodeSMS7Bit (PDUSTRING) <br>{ 目的   : 解码一个7-bit SMS (GSM 03.38) 为ASCII码 <br>{===============================================================} <br>{ 函数:RESULTSTRING = ReverseStr (SOURCESTRING) <br>{ 目的   : 反转一个字符串 <br>{===============================================================} <br>unit BinHexTools; <br>interface <br>function HexToBin(HexNr : string): string; <br>function HexCharToInt(HexToken : char):Integer; <br>function HexCharToBin(HexToken : char): string; <br>function pow(base, power: integer): integer; <br>function BinStrToInt(BinStr : string) : integer; <br>function DecodeSMS7Bit(PDU : string):string; <br>function ReverseStr(SourceStr : string) : string; <br>implementation <br>uses sysutils, dialogs; <br>function HexCharToInt(HexToken : char):Integer; <br>begin <br>{if HexToken&gt;#97 then HexToken:=Chr(Ord(HexToken)-32); <br>{ use lowercase aswell } <br>Result:=0; <br>if (HexToken&gt;#47) and (HexToken&lt;#58) then       { chars 0....9 } <br>   Result:=Ord(HexToken)-48 <br>else if (HexToken&gt;#64) and (HexToken&lt;#71) then{ chars A....F } <br>   Result:=Ord(HexToken)-65 + 10; <br>end; <br>function HexCharToBin(HexToken : char): string; <br>var DivLeft : integer; <br>begin <br>    DivLeft:=HexCharToInt(HexToken);   { first HEX-&gt;BIN } <br>    Result:=''; <br>                                       { Use reverse dividing } <br>    repeat                           { Trick; divide by 2 } <br>      if odd(DivLeft) then             { result = odd ? then bit = 1 } <br>      Result:='1'+Result             { result = even ? then bit = 0 } <br>      else <br>      Result:='0'+Result; <br>      DivLeft:=DivLeft div 2;       { keep dividing till 0 left and length = 4 } <br>    until (DivLeft=0) and (length(Result)=4);      { 1 token = nibble = 4 bits } <br>end; <br>function HexToBin(HexNr : string): string; <br>{ only stringsize is limit of binnr } <br>var Counter : integer; <br>begin <br>Result:=''; <br>for Counter:=1 to length(HexNr) do <br>    Result:=Result+HexCharToBin(HexNr); <br>end; <br>function pow(base, power: integer): integer; <br>var counter : integer; <br>begin <br>Result:=1; <br>for counter:=1 to power do <br>    Result:=Result*base; <br>end; <br>function BinStrToInt(BinStr : string) : integer; <br>var counter : integer; <br>begin <br>if length(BinStr)&gt;16 then <br>    raise ERangeError.Create(#13+BinStr+#13+ <br>            'is not within the valid range of a 16 bit binary.'+#13); <br>Result:=0; <br>for counter:=1 to length(BinStr) do <br>      if BinStr='1' then <br>      Result:=Result+pow(2,length(BinStr)-counter); <br>end; <br>function DecodeSMS7Bit(PDU : string):string; <br>var OctetStr : string; <br>    OctetBin : string; <br>    Charbin: string; <br>    PrevOctet: string; <br>    Counter: integer; <br>    Counter2 : integer; <br>begin <br>PrevOctet:=''; <br>Result:=''; <br>for Counter:=1 to length(PDU) do <br>    begin <br>      if length(PrevOctet)&gt;=7 then   { if 7 Bit overflow on previous } <br>      begin <br>          if BinStrToInt(PrevOctet)&lt;&gt;0 then <br>            Result:=Result+Chr(BinStrToInt(PrevOctet)) <br>          else Result:=Result+' '; <br>          PrevOctet:=''; <br>      end; <br>      if Odd(Counter) then            { only take two nibbles at a time } <br>      begin <br>          OctetStr:=Copy(PDU,Counter,2); <br>          OctetBin:=HexToBin(OctetStr); <br>          Charbin:=''; <br>          for Counter2:=1 to length(PrevOctet) do <br>            Charbin:=Charbin+PrevOctet; <br>          for Counter2:=1 to 7-length(PrevOctet) do <br>            Charbin:=OctetBin+Charbin; <br>          if BinStrToInt(Charbin)&lt;&gt;0 then Result:=Result+Chr(BinStrToInt(CharBin)) <br>            else Result:=Result+' '; <br>          PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1); <br>      end; <br>    end; <br>end; <br>function ReverseStr(SourceStr : string) : string; <br>var Counter : integer; <br>begin <br>Result:=''; <br>for Counter:=1 to length(SourceStr) do <br>    Result:=SourceStr+Result; <br>end; <br>end.</p>
<p>&nbsp;</p>
<p>转自https://www.cnblogs.com/hhmm99/p/10613708.html</p><br><br>
来源:https://www.cnblogs.com/zyb2016/p/11064047.html
頁: [1]
查看完整版本: Delphi中常用字符串处理函数