DELPHI中优秀的字符串分割函数

字体大小: 中小 标准 ->行高大小: 标准
function SplitString(Source, Deli: string ): TStringList;stdcall; 
var 
EndOfCurrentString: byte; 
StringList:TStringList; 
begin 
StringList:=TStringList.Create; 
while Pos(Deli, Source)>0 do 
begin 
EndOfCurrentString := Pos(Deli, Source); 
StringList.add(Copy(Source, 1, EndOfCurrentString - 1)); 
Source := Copy(Source, EndOfCurrentString + length(Deli), length(Source) - EndOfCurrentString); 
end; 
Result := StringList; 
StringList.Add(source); 
end; 

本文来自CSDN博客:http://blog.csdn.net/mahuzi/archive/2005/10/13/502563.aspx
 
 
 
分割函数2:
 
function SplitString(pString:Pchar;psubString:PChar):TStringList;
var
   nSize,SubStringSize:DWord;
   intI,intJ,intK:DWORD;
   ts:TStringList;
   curChar:Char;
   strString:string;
   strsearchSubStr:string;
begin
   nSize:=strLen(pString);
   SubStringSize:=strLen(PSubString);
   ts:=TStringList.Create;
   strstring:='';
   inti:=0;
   while intI<=(nSize-1) do
   begin
      if (nsize-inti)>= substringSize then
      begin
          if ((PString+intI)^=pSubString^) then
          begin
             intk:=inti;
            strSearchSubStr:='';
            curchar:=(pstring+intk)^;
            strsearchSubStr:=strSearchSubStr+Curchar;
            intk:=intk+1;
            for intj:= 1 to SubStringSize-1  do
            begin
               if ((pString+intk)^=(PSubString+intj)^) then
               begin
                  curchar:=(pstring+intk)^;
                  intk:=intk+1;
                  strsearchSubStr:=strSearchSubStr+Curchar;
            end
            else begin
              inti:=intk;
              strString:=strString+strSearchSubStr;
              break; //不匹配 退出FOR
            end;
        end;
         if (intJ=substringSize) or (SubStringSize=1) then
         begin
            inti:=intk;
            ts.add(strstring);
            strstring:='';
         end;
      end
      else begin
         curChar:=(pString+inti)^;
         strstring:=strstring+curchar;
         inti:=inti+1;
      end;
      if inti=nsize then
      begin
         ts.Add(strString);
         strString:='';
       end;
     end
     else begin //将剩下的字符给作为一个字符串复制给字符串集合
        strString:=strstring+string(pString+inti);
        ts.Add(strstring);
        inti:=nsize;
     end;
   end;
   Result:=ts;
 
end;
 
 
 
分割函数3:
 
function split(src,dec : string):TStringList;
var
  i : integer;
  str : string;
begin
  result := TStringList.Create;
  repeat
    i := pos(dec,src);
    str := copy(src,1,i-1);
    if (str='') and (i>0) then
    begin
      delete(src,1,length(dec));
      continue;
    end;
    if i>0 then
    begin
      result.Add(str);
      delete(src,1,i+length(dec)-1);
    end;
  until i<=0;
  if src<>'' then
    result.Add(src);
end;
 
 
 
说明:函数2的效率最高,函数3次之,函数1效率最低。函数2采用指针来实现,因此,效率最高。当字符串很大时,函数3和函数1基本就到了无法忍受的地步了。

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/69860.html