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> </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 >= 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 <> nil then <br> while (ToScan^ <> #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 > 0 then begin <br> delete( s, i, Length(sub1)); <br> insert( sub2, s, i ); <br> end; <br> until i < 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 > 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 <> 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) < 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 ; < /span><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 ; < /span><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)>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('<invalid>','This <invalid> is my string and I wan to <br> remove the word <invalid>'); <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<>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)>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>#97 then HexToken:=Chr(Ord(HexToken)-32); <br>{ use lowercase aswell } <br>Result:=0; <br>if (HexToken>#47) and (HexToken<#58) then { chars 0....9 } <br> Result:=Ord(HexToken)-48 <br>else if (HexToken>#64) and (HexToken<#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->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)>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)>=7 then { if 7 Bit overflow on previous } <br> begin <br> if BinStrToInt(PrevOctet)<>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)<>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> </p>
<p>转自https://www.cnblogs.com/hhmm99/p/10613708.html</p><br><br>
来源:https://www.cnblogs.com/zyb2016/p/11064047.html
頁:
[1]