Delphi中常用字符串处理函数

来源:互联网 发布:华驰网络 编辑:程序博客网 时间:2024/05/21 12:44

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:='01231142211 :655767';//需要把:替换成----
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个字符即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. 
原创粉丝点击