Delphi中常用字符串处理函数

来源:互联网 发布:java设计模式书籍知乎 编辑:程序博客网 时间:2024/05/18 02:15
    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:varaStr: String;beginaStr := '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. ////////////////////////////////////////////////////////
    16. LEFTSTR, MIDSTR, RIGHTSTR的介绍

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

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

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