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. 从后向前读取字符串

    function GetUrlLast(Source,target : string): string;
    var
      sl: TStrings;
    begin
      sl:= TStringList.Create;
      try
        sl.Delimiter:= target[1];//把字符串的Delimiter属性设为你想要的 这里为/
        sl.DelimitedText:= Source ;
        result:= sl.Strings[sl.Count-1];
      finally
         sl.Free;
      end;


  15. 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.
  16. ////////////////////////////////////////////////////////

  17. LEFTSTR, MIDSTR, RIGHTSTR的介绍

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

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


  20. 8.{判断字符是否是数字}

  21. functionIsDigit(ch: char): boolean;

  22. begin

  23.  Result := ch in ['0'..'9'];

  24. end;


  25. 9、{判断字符是否是大写字符}

  26. functionIsUpper(ch: char): boolean;

  27. begin

  28.  Result := ch in ['A'..'Z'];

  29. end;

  30. 10、{判断字符是否是小写字符}

  31. functionIsLower(ch: char): boolean;

  32. begin

  33.  Result := ch in ['a'..'z'];

  34. end;

  35. 11、{转换为大写字符}

  36. functionToUpper(ch: char): char;

  37. begin

  38.  Result := chr(ord(ch) and $DF);

  39. end;

  40. 12、{转换为小写字符}

  41. functionToLower(ch: char): char;

  42. begin

  43.  Result := chr(ord(ch) or $20);

  44. end;

  45. { Capitalizes first letter of every word in s }


  46. function Proper(const s: string): string;

  47. var

  48.  i: Integer;

  49.  CapitalizeNextLetter: Boolean;

  50. begin

  51.  Result := LowerCase(s);

  52.  CapitalizeNextLetter := True;

  53. for i := 1 to Length(Result) do

  54. begin

  55.    if CapitalizeNextLetter and IsLower(Result[i]) then

  56.      Result[i] := ToUpper(Result[i]);

  57.    CapitalizeNextLetter := Result[i] = ' ';

  58. end;

  59. end;

  60. ////////////////////////////////////////////////////////////

  61. 13.{返回两个子字符串之间字符的个数}

  62. Functionp2pcount( s, ss1, ss2 : string ): integer;

  63. var i, j, slen : integer;

  64. begin

  65.   i := pos( ss1, s );

  66.   j := pos( ss2, s );

  67.   slen := Length(ss2);

  68.   if j >= i then Result := j - i + slen else Result := 0;

  69. end;

  70. 14.{更快速的字符查询,快40%}

  71. functionScanStr(ToScan: PChar; Sign: Char):PChar;

  72. begin

  73.  Result:= nil;

  74.  if ToScan <> nil then

  75.    while (ToScan^ <> #0) do begin

  76.      if ToScan^ = Sign thenbegin

  77.        Result:= ToScan;

  78.        break;

  79. end;

  80.     inc(ToScan);

  81. end;

  82. end;

  83. /////////////////////////////

  84. 15.替换字符串中子串的函数,他可以从字符串中找出指定子串,并替换为另一子串

  85. function replacing(S,source,target:string):string;

  86. var site,StrLen:integer;

  87. begin

  88. {source在S中出现的位置}

  89. site:=pos(source,s);

  90. {source的长度}

  91. StrLen:=length(source);

  92. {删除source字符串}

  93. delete(s,site,StrLen);

  94. {插入target字符串到S中}

  95. insert(target,s,site);

  96. {返回新串}

  97. replacing:=s;

  98. end;

  99. ///////////////////////

  100. 另两个替换字符串中子串的函数

  101. function repl_substr( sub1, sub2, s: string ): string;

  102. var i: integer;

  103. begin

  104.   repeat

  105.     i := pos( sub1, s ) ;

  106.     if i > 0 thenbegin

  107. delete( s, i, Length(sub1));

  108. insert( sub2, s, i );

  109. end;

  110.   until i < 1;

  111.   Result := s;

  112. end;

  113. function ReplaceText(const S,ReplacePiece,ReplaceWith: String):String;

  114. Var Position: Integer;

  115.    TempStr: String;

  116. begin

  117.  Position := Pos(ReplacePiece,S);

  118.  if Position > 0 thenBegin

  119.    TempStr := S;

  120. Delete(TempStr,1,Position-1+Length(ReplacePiece));

  121.    Result :=

  122. Copy(S,1,Position-1)+ReplaceWith+ReplaceText(TempStr,ReplacePiece,ReplaceWith)

  123. Endelse Result := S;

  124. end;

  125. ////////////////////////

  126. 替换全部子字符串的函数

  127. function ReplaceSub(str, sub1, sub2: String): String;

  128.    var

  129.    aPos: Integer;

  130.    rslt: String;

  131. begin

  132.    aPos := Pos(sub1, str);

  133.    rslt := '';

  134.    while (aPos <> 0) do begin

  135.      rslt := rslt + Copy(str, 1, aPos - 1) + sub2;

  136. Delete(str, 1, aPos + Length(sub1));

  137.      aPos := Pos(sub1, str);

  138. end;

  139.    Result := rslt + str;

  140. end;

  141. /////////////////////////

  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 (left) then

  149.      result := padChar + result

  150. else

  151.      result := result + padChar;

  152. end;

  153. /////////////////////////////////////

  154. 提取字符串中指定子字符串前的字符串

  155. Function Before ( string ; Var S:string ) : string ; < /span>

  156.  Var

  157.  F : Word ;

  158. begin

  159.  F := POS (Src,S) ;

  160.  if F=0 then

  161.    Before := S

  162. else

  163.    Before := COPY(S,1,F-1) ;

  164. end ;

  165. //////////////////////////////////

  166. 提取字符串中指定子字符串后的字符串

  167. FunctionAfter ( string ; Var S:string ) : string ; < /span>

  168.  Var

  169.  F : Word ;

  170. begin

  171.  F := POS (Src,S) ;

  172.  if F=0 then

  173. After := ''

  174. else

  175. After := COPY(S,F+length(src),length(s)) ;

  176. end ;

  177. ////////////////////////////////////

  178. 判断字符串是否可以转换为整数

  179. function IsIntStr(const S: string): boolean;

  180. begin

  181.  Result:=StrToIntDef(S,0)=StrToIntDef(S,1);

  182. end;

  183. //////////////////////////////////////

  184. 从字符串中删除指定字符串

  185. procedure RemoveInvalid(what, where: string): string;

  186.  var

  187.  tstr: string;

  188. begin

  189.  tstr:=where;

  190.  while pos(what, tstr)>0 do

  191.    tstr:=copy(tstr,1,pos(what,tstr)-1) +

  192.       copy(tstr,pos(what,tstr)+length(tstr),length(tstr));

  193.  Result:=tstr;

  194. end;

  195. 用法:

  196.  NewStr:=RemoveInvalid('<invalid>','This <invalid> is my string and I wan to

  197.       remove the word <invalid>');

  198. ///////////////////////////////////////////

  199. 根据某个字符分割字符串的函数

  200. procedure SeparateTerms(s : string;Separator : char;Terms : TStringList);

  201. { This browses a string and divide it into terms whenever the given

  202.  separator is found. The separators will be removed }

  203.  var

  204.  hs : string;

  205.  p : integer;

  206. begin

  207.  Terms.Clear; // First remove all remaining terms

  208.  if Length(s)=0 then   // Nothin' to separate

  209.    Exit;

  210.  p:=Pos(Separator,s);

  211.  while P<>0 do

  212. begin

  213.    hs:=Copy(s,1,p-1);   // Copy term

  214.    Terms.Add(hs);       // Addto list

  215. Delete(s,1,p);       // Remove term and separator

  216.    p:=Pos(Separator,s); // Search next separator

  217. end;

  218.  if Length(s)>0 then

  219.    Terms.Add(s);        // Add remaining term

  220. end;

  221. ==========

  222. = 用  法

  223. ==========

  224. var

  225. Terms : TStringList;

  226. i : integer;

  227. const

  228. TestStr = '1st term;2nd term;3rd term';

  229. begin

  230.  Terms:=TStringList.Create;

  231.  SeparateTerms(TestStr,';',Terms);

  232. for i:=0 to terms.Count-1 do

  233.    ShowMessage(Terms.Strings[i]);

  234.  Terms.Free;

  235. end;

  236. /////////////////////////////

  237. 根据一组字符分割字符串的函数

  238. type

  239. Charset = setofChar;

  240. var

  241. f : Text;

  242. s : String;

  243. procedure WriteStringSplitted(var s: String; Separators: Charset);

  244. var

  245. a,e : Integer;  {anfang und ende des w鰎tchens}

  246. begin

  247. a := 1;

  248. for e := 1 to Length(s) do

  249.  if s[e] in Separators thenbegin

  250.   WriteLn(Copy(s, a, e-a));

  251.   a := e + 1;

  252. end;

  253.  WriteLn(Copy(s, a, e-a+1));

  254. end;

  255. begin

  256. Assign(f, 'c:/dingsbums/text.txt');

  257. Reset(f);

  258. while not EOF(f) do begin

  259.  ReadLn(f,s);

  260.  WriteStringSplitted(s, [':', ',']);

  261. end;

  262. Close(f);

  263. end.

  264. //////////////////////////////////////////////////

  265. {===============================================================}

  266. { 函数  : RESULTSTRING = HexToBin(HEXSTRING)

  267. { 目的   : 把十六进制字符串转换为二进制字符串

  268. {

  269. {===============================================================}

  270. { 函数  : RESULTINTEGER = HexCharToInt(HEXCHAR)

  271. { 目的   : 转换一个十六进制字符为整数

  272. {===============================================================}

  273. { 函数  : RESULTSTRING = HexCharToBin(HEXCHAR)

  274. { 目的   : 转换一个十六进制字符为二进制字符串

  275. {===============================================================}

  276. { 函数  : RESULTINTEGER = Pow(BASE,POWER)

  277. { 目的   : 指数函数

  278. {===============================================================}

  279. { 函数  : RESULTINTEGER = BinStrToInt(BINSTRING)

  280. { 目的   : 把二进制字符串转换为整数

  281. {===============================================================}

  282. { 函数  : RESULTSTRING = DecodeSMS7Bit (PDUSTRING)

  283. { 目的   : 解码一个7-bit SMS (GSM 03.38) 为ASCII码

  284. {===============================================================}

  285. { 函数  :  RESULTSTRING = ReverseStr (SOURCESTRING)

  286. { 目的   : 反转一个字符串

  287. {===============================================================}

  288. unit BinHexTools;

  289. interface

  290. function HexToBin(HexNr : string): string;

  291. function HexCharToInt(HexToken : char):Integer;

  292. function HexCharToBin(HexToken : char): string;

  293. function pow(base, power: integer): integer;

  294. function BinStrToInt(BinStr : string) : integer;

  295. function DecodeSMS7Bit(PDU : string):string;

  296. function ReverseStr(SourceStr : string) : string;

  297. implementation

  298. uses sysutils, dialogs;

  299. function HexCharToInt(HexToken : char):Integer;

  300. begin

  301.  {if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32);

  302.  { use lowercase aswell }

  303.  Result:=0;

  304.  if (HexToken>#47) and (HexToken<#58) then       { chars 0....9 }

  305.     Result:=Ord(HexToken)-48

  306. else if (HexToken>#64) and (HexToken<#71) then  { chars A....F }

  307.     Result:=Ord(HexToken)-65 + 10;

  308. end;

  309. function HexCharToBin(HexToken : char): string;

  310. var DivLeft : integer;

  311. begin

  312.    DivLeft:=HexCharToInt(HexToken);   { first HEX->BIN }

  313.    Result:='';

  314.                                       { Use reverse dividing }

  315.    repeat                             { Trick; divide by 2 }

  316.      if odd(DivLeft) then             { result = odd ? thenbit = 1 }

  317.        Result:='1'+Result             { result = even ? thenbit = 0 }

  318. else

  319.        Result:='0'+Result;

  320.      DivLeft:=DivLeft div 2;       { keep dividing till 0 leftand length = 4 }

  321.    until (DivLeft=0) and (length(Result)=4);      { 1 token = nibble = 4 bits }

  322. end;

  323. function HexToBin(HexNr : string): string;

  324. { only stringsize is limit of binnr }

  325. var Counter : integer;

  326. begin

  327.  Result:='';

  328. for Counter:=1 to length(HexNr) do

  329.    Result:=Result+HexCharToBin(HexNr[Counter]);

  330. end;

  331. function pow(base, power: integer): integer;

  332. var counter : integer;

  333. begin

  334.  Result:=1;

  335. for counter:=1 to power do

  336.    Result:=Result*base;

  337. end;

  338. function BinStrToInt(BinStr : string) : integer;

  339. var counter : integer;

  340. begin

  341.  if length(BinStr)>16 then

  342.    raise ERangeError.Create(#13+BinStr+#13+

  343. 'is not within the valid range of a 16 bit binary.'+#13);

  344.  Result:=0;

  345. for counter:=1 to length(BinStr) do

  346.      if BinStr[Counter]='1'then

  347.        Result:=Result+pow(2,length(BinStr)-counter);

  348. end;

  349. function DecodeSMS7Bit(PDU : string):string;

  350. var OctetStr : string;

  351.    OctetBin : string;

  352.    Charbin  : string;

  353.    PrevOctet: string;

  354.    Counter  : integer;

  355.    Counter2 : integer;

  356. begin

  357.  PrevOctet:='';

  358.  Result:='';

  359. for Counter:=1 to length(PDU) do

  360. begin

  361.      if length(PrevOctet)>=7 then     { if 7 Bit overflow on previous }

  362. begin

  363.          if BinStrToInt(PrevOctet)<>0 then

  364.            Result:=Result+Chr(BinStrToInt(PrevOctet))

  365. else Result:=Result+' ';

  366.          PrevOctet:='';

  367. end;

  368.      if Odd(Counter) then            { only take two nibbles at a time }

  369. begin

  370.          OctetStr:=Copy(PDU,Counter,2);

  371.          OctetBin:=HexToBin(OctetStr);

  372.          Charbin:='';

  373. for Counter2:=1 to length(PrevOctet) do

  374.            Charbin:=Charbin+PrevOctet[Counter2];

  375. for Counter2:=1 to 7-length(PrevOctet) do

  376.            Charbin:=OctetBin[8-Counter2+1]+Charbin;

  377.          if BinStrToInt(Charbin)<>0 then Result:=Result+Chr(BinStrToInt(CharBin))

  378. else Result:=Result+' ';

  379.          PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1);

  380. end;

  381. end;

  382. end;

  383. function ReverseStr(SourceStr : string) : string;

  384. var Counter : integer;

  385. begin

  386.  Result:='';

  387. for Counter:=1 to length(SourceStr) do

  388.    Result:=SourceStr[Counter]+Result;

  389. end;

  390. end.