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:='01231142211655767';//須要把:替換成----
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個字符即二、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://blog.csdn.net/mrwlw/article/details/78238434git

相關文章
相關標籤/搜索