Delphi中常用字符串处理函数

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

    16. 这几个函数都包含在StrUtils中,所以需要uses StrUtils; 
      假设字符串是 Dstr := ’Delphi is the BEST’, 那么

    17. LeftStr(Dstr, 5) := ’Delph’ 
      MidStr(Dstr, 6, 7) := ’i is th’ 
      RightStr(Dstr, 6) := ’e BEST’

    18.  
    19.  
    20. 8.{判断字符是否是数字} 
    21. function IsDigit(ch: char): boolean; 
    22. begin 
    23.   Result := ch in ['0'..'9']; 
    24. end
    25.  
    26. 9、{判断字符是否是大写字符} 
    27. function IsUpper(ch: char): boolean; 
    28. begin 
    29.   Result := ch in ['A'..'Z']; 
    30. end
    31. 10、{判断字符是否是小写字符} 
    32. function IsLower(ch: char): boolean; 
    33. begin 
    34.   Result := ch in ['a'..'z']; 
    35. end
    36. 11、{转换为大写字符} 
    37. function ToUpper(ch: char): char
    38. begin 
    39.   Result := chr(ord(ch) and $DF); 
    40. end
    41. 12、{转换为小写字符} 
    42. function ToLower(ch: char): char
    43. begin 
    44.   Result := chr(ord(ch) or $20); 
    45. end
    46. { Capitalizes first letter of every word in s } 
    47.  
    48. function Proper(const s: string): string; 
    49. var 
    50.   i: Integer
    51.   CapitalizeNextLetter: Boolean; 
    52. begin 
    53.   Result := LowerCase(s); 
    54.   CapitalizeNextLetter := True
    55.   for i := 1 to Length(Result) do 
    56.   begin 
    57.     if CapitalizeNextLetter and IsLower(Result[i]) then 
    58.       Result[i] := ToUpper(Result[i]); 
    59.     CapitalizeNextLetter := Result[i] = ' '
    60.   end
    61. end
    62.  
    63. 13.{返回两个子字符串之间字符的个数} 
    64. Function p2pcount( s, ss1, ss2 : string ): integer
    65. var i, j, slen : integer
    66. begin 
    67.    i := pos( ss1, s ); 
    68.    j := pos( ss2, s ); 
    69.    slen := Length(ss2); 
    70.    if j >= i then Result := j - i + slen else Result := 0; 
    71. end
    72. 14.{更快速的字符查询,快40%} 
    73. function ScanStr(ToScan: PChar; Sign: Char):PChar; 
    74. begin 
    75.   Result:= nil; 
    76.   if ToScan <> nil then 
    77.     while (ToScan^ <> #0) do begin 
    78.       if ToScan^ = Sign then begin 
    79.         Result:= ToScan; 
    80.         break; 
    81.        end
    82.      inc(ToScan); 
    83.     end
    84. end
    85. 15.替换字符串中子串的函数,他可以从字符串中找出指定子串,并替换为另一子串。 
    86. function replacing(S,source,target:string):string; 
    87. var site,StrLen:integer
    88. begin 
    89. {source在S中出现的位置} 
    90. site:=pos(source,s); 
    91. {source的长度} 
    92. StrLen:=length(source); 
    93. {删除source字符串} 
    94. delete(s,site,StrLen); 
    95. {插入target字符串到S中} 
    96. insert(target,s,site); 
    97. {返回新串} 
    98. replacing:=s; 
    99. end
    100. /// 
    101. 另两个替换字符串中子串的函数 
    102. function repl_substr( sub1, sub2, s: string ): string; 
    103. var i: integer
    104. begin 
    105.    repeat 
    106.      i := pos( sub1, s ) ; 
    107.      if i > 0 then begin 
    108.        delete( s, i, Length(sub1)); 
    109.        insert( sub2, s, i ); 
    110.      end
    111.    until i < 1; 
    112.    Result := s; 
    113. end
    114. function ReplaceText(const S,ReplacePiece,ReplaceWith: String):String; 
    115. Var Position: Integer
    116.     TempStr: String; 
    117. begin 
    118.   Position := Pos(ReplacePiece,S); 
    119.   if Position > 0 then Begin 
    120.     TempStr := S; 
    121.     Delete(TempStr,1,Position-1+Length(ReplacePiece)); 
    122.     Result := 
    123. Copy(S,1,Position-1)+ReplaceWith+ReplaceText(TempStr,ReplacePiece,ReplaceWith) 
    124.   End else Result := S; 
    125. end
    126.  
    127. 替换全部子字符串的函数 
    128.   function ReplaceSub(str, sub1, sub2: String): String; 
    129.     var 
    130.     aPos: Integer
    131.     rslt: String; 
    132.   begin 
    133.     aPos := Pos(sub1, str); 
    134.     rslt := ''
    135.     while (aPos <> 0) do begin 
    136.       rslt := rslt + Copy(str, 1, aPos - 1) + sub2; 
    137.       Delete(str, 1, aPos + Length(sub1)); 
    138.       aPos := Pos(sub1, str); 
    139.     end
    140.     Result := rslt + str; 
    141.   end
    142. 在字符串左右填充指定数量的指定字符 
    143. function UT_PadString(inString :string; maxLength :integer; padChar :char
    144. left :boolean) :string; 
    145. begin 
    146.   result := inString; 
    147.   while (Length(result) < maxLength) do 
    148.     if (leftthen 
    149.       result := padChar + result 
    150.     else 
    151.       result := result + padChar; 
    152. end
    153. 提取字符串中指定子字符串前的字符串 
    154. Function Before ( string ; Var S:string ) : string ; < /span>
    155.   Var 
    156.   F : Word ; 
    157. begin 
    158.   F := POS (Src,S) ; 
    159.   if F=0 then 
    160.     Before := S 
    161.    else 
    162.     Before := COPY(S,1,F-1) ; 
    163. end ; 
    164. // 
    165. 提取字符串中指定子字符串后的字符串 
    166. Function After ( string ; Var S:string ) : string ; < /span>
    167.   Var 
    168.   F : Word ; 
    169. begin 
    170.   F := POS (Src,S) ; 
    171.   if F=0 then 
    172.     After := '' 
    173.    else 
    174.     After := COPY(S,F+length(src),length(s)) ; 
    175. end ; 
    176.  
    177. 判断字符串是否可以转换为整数 
    178. function IsIntStr(const S: string): boolean; 
    179. begin 
    180.   Result:=StrToIntDef(S,0)=StrToIntDef(S,1); 
    181. end
    182. // 
    183. 从字符串中删除指定字符串 
    184. procedure RemoveInvalid(what, where: string): string; 
    185.   var 
    186.   tstr: string; 
    187. begin 
    188.   tstr:=where
    189.   while pos(what, tstr)>0 do 
    190.     tstr:=copy(tstr,1,pos(what,tstr)-1) + 
    191.        copy(tstr,pos(what,tstr)+length(tstr),length(tstr)); 
    192.   Result:=tstr; 
    193. end
    194. 用法: 
    195.   NewStr:=RemoveInvalid('<invalid>','This <invalid> is my string and I wan to 
    196.        remove the word <invalid>'); 
    197. /// 
    198. 根据某个字符分割字符串的函数 
    199. procedure SeparateTerms(s : string;Separator : char;Terms : TStringList); 
    200. { This browses a string and divide it into terms whenever the given 
    201.   separator is found. The separators will be removed } 
    202.   var 
    203.   hs : string; 
    204.   p : integer
    205. begin 
    206.   Terms.Clear; // First remove all remaining terms 
    207.   if Length(s)=0 then   // Nothin' to separate 
    208.     Exit; 
    209.   p:=Pos(Separator,s); 
    210.   while P<>0 do 
    211.   begin 
    212.     hs:=Copy(s,1,p-1);   // Copy term 
    213.     Terms.Add(hs);       // Add to list 
    214.     Delete(s,1,p);       // Remove term and separator 
    215.     p:=Pos(Separator,s); // Search next separator 
    216.   end
    217.   if Length(s)>0 then 
    218.     Terms.Add(s);        // Add remaining term 
    219. end
    220. ========== 
    221. = 用  法 
    222. ========== 
    223. var 
    224. Terms : TStringList; 
    225. i : integer
    226. const 
    227. TestStr = '1st term;2nd term;3rd term'
    228. begin 
    229.   Terms:=TStringList.Create
    230.   SeparateTerms(TestStr,';',Terms); 
    231.   for i:=0 to terms.Count-1 do 
    232.     ShowMessage(Terms.Strings[i]); 
    233.   Terms.Free
    234. end
    235. 根据一组字符分割字符串的函数 
    236. type 
    237.  Charset = set of Char
    238. var 
    239.  f : Text; 
    240.  s : String; 
    241. procedure WriteStringSplitted(var s: String; Separators: Charset); 
    242. var 
    243.  a,e : Integer;  {anfang und ende des w鰎tchens} 
    244. begin 
    245.  a := 1; 
    246.  for e := 1 to Length(s) do 
    247.   if s[e] in Separators then begin 
    248.    WriteLn(Copy(s, a, e-a)); 
    249.    a := e + 1; 
    250.   end
    251.   WriteLn(Copy(s, a, e-a+1)); 
    252. end
    253. begin 
    254.  Assign(f, 'c:/dingsbums/text.txt'); 
    255.  Reset(f); 
    256.  while not EOF(f) do begin 
    257.   ReadLn(f,s); 
    258.   WriteStringSplitted(s, [':'',']); 
    259.  end
    260.  Close(f); 
    261. end
    262. // 
    263. {===============================================================} 
    264. { 函数  : RESULTSTRING = HexToBin(HEXSTRING) 
    265. { 目的   : 把十六进制字符串转换为二进制字符串 
    266. {===============================================================} 
    267. { 函数  : RESULTINTEGER = HexCharToInt(HEXCHAR) 
    268. { 目的   : 转换一个十六进制字符为整数 
    269. {===============================================================} 
    270. { 函数  : RESULTSTRING = HexCharToBin(HEXCHAR) 
    271. { 目的   : 转换一个十六进制字符为二进制字符串 
    272. {===============================================================} 
    273. { 函数  : RESULTINTEGER = Pow(BASE,POWER) 
    274. { 目的   : 指数函数 
    275. {===============================================================} 
    276. { 函数  : RESULTINTEGER = BinStrToInt(BINSTRING) 
    277. { 目的   : 把二进制字符串转换为整数 
    278. {===============================================================} 
    279. { 函数  : RESULTSTRING = DecodeSMS7Bit (PDUSTRING) 
    280. { 目的   : 解码一个7-bit SMS (GSM 03.38) 为ASCII码 
    281. {===============================================================} 
    282. { 函数  :  RESULTSTRING = ReverseStr (SOURCESTRING) 
    283. { 目的   : 反转一个字符串 
    284. {===============================================================} 
    285. unit BinHexTools; 
    286. interface 
    287. function HexToBin(HexNr : string): string; 
    288. function HexCharToInt(HexToken : char):Integer
    289. function HexCharToBin(HexToken : char): string; 
    290. function pow(base, power: integer): integer
    291. function BinStrToInt(BinStr : string) : integer
    292. function DecodeSMS7Bit(PDU : string):string; 
    293. function ReverseStr(SourceStr : string) : string; 
    294. implementation 
    295. uses sysutils, dialogs; 
    296. function HexCharToInt(HexToken : char):Integer
    297. begin 
    298.   {if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32); 
    299.   { use lowercase aswell } 
    300.   Result:=0; 
    301.   if (HexToken>#47) and (HexToken<#58) then       { chars 0....9 } 
    302.      Result:=Ord(HexToken)-48 
    303.   else if (HexToken>#64) and (HexToken<#71) then  { chars A....F } 
    304.      Result:=Ord(HexToken)-65 + 10; 
    305. end
    306. function HexCharToBin(HexToken : char): string; 
    307. var DivLeft : integer
    308. begin 
    309.     DivLeft:=HexCharToInt(HexToken);   { first HEX->BIN } 
    310.     Result:=''
    311.                                        { Use reverse dividing } 
    312.     repeat                             { Trick; divide by 2 } 
    313.       if odd(DivLeft) then             { result = odd ? then bit = 1 } 
    314.         Result:='1'+Result             { result = even ? then bit = 0 } 
    315.       else 
    316.         Result:='0'+Result; 
    317.       DivLeft:=DivLeft div 2;       { keep dividing till 0 left and length = 4 } 
    318.     until (DivLeft=0) and (length(Result)=4);      { 1 token = nibble = 4 bits } 
    319. end
    320. function HexToBin(HexNr : string): string; 
    321. only stringsize is limit of binnr } 
    322. var Counter : integer
    323. begin 
    324.   Result:=''
    325.   for Counter:=1 to length(HexNr) do 
    326.     Result:=Result+HexCharToBin(HexNr[Counter]); 
    327. end
    328. function pow(base, power: integer): integer
    329. var counter : integer
    330. begin 
    331.   Result:=1; 
    332.   for counter:=1 to power do 
    333.     Result:=Result*base; 
    334. end
    335. function BinStrToInt(BinStr : string) : integer
    336. var counter : integer
    337. begin 
    338.   if length(BinStr)>16 then 
    339.     raise ERangeError.Create(#13+BinStr+#13+ 
    340.             'is not within the valid range of a 16 bit binary.'+#13); 
    341.   Result:=0; 
    342.   for counter:=1 to length(BinStr) do 
    343.       if BinStr[Counter]='1' then 
    344.         Result:=Result+pow(2,length(BinStr)-counter); 
    345. end
    346. function DecodeSMS7Bit(PDU : string):string; 
    347. var OctetStr : string; 
    348.     OctetBin : string; 
    349.     Charbin  : string; 
    350.     PrevOctet: string; 
    351.     Counter  : integer
    352.     Counter2 : integer
    353. begin 
    354.   PrevOctet:=''
    355.   Result:=''
    356.   for Counter:=1 to length(PDU) do 
    357.     begin 
    358.       if length(PrevOctet)>=7 then     { if 7 Bit overflow on previous } 
    359.         begin 
    360.           if BinStrToInt(PrevOctet)<>0 then 
    361.             Result:=Result+Chr(BinStrToInt(PrevOctet)) 
    362.           else Result:=Result+' '
    363.           PrevOctet:=''
    364.         end
    365.       if Odd(Counter) then            { only take two nibbles at a time } 
    366.         begin 
    367.           OctetStr:=Copy(PDU,Counter,2); 
    368.           OctetBin:=HexToBin(OctetStr); 
    369.           Charbin:=''
    370.           for Counter2:=1 to length(PrevOctet) do 
    371.             Charbin:=Charbin+PrevOctet[Counter2]; 
    372.           for Counter2:=1 to 7-length(PrevOctet) do 
    373.             Charbin:=OctetBin[8-Counter2+1]+Charbin; 
    374.           if BinStrToInt(Charbin)<>0 then Result:=Result+Chr(BinStrToInt(CharBin)) 
    375.             else Result:=Result+' '
    376.           PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1); 
    377.         end
    378.     end
    379. end
    380. function ReverseStr(SourceStr : string) : string; 
    381. var Counter : integer
    382. begin 
    383.   Result:=''
    384.   for Counter:=1 to length(SourceStr) do 
    385.     Result:=SourceStr[Counter]+Result; 
    386. end
    387. end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值