type
TSplitArray=array of string;
PSplitArray=^TSplitArray;
TSplit=class(TStringList)
public
function Split(str:string;Delimiter:string):TSplitArray;
function SplitStr(str:string;Delimiter:string):TSplitArray;
end;
{ TSplit }
function TSplit.Split(str, Delimiter: string): TSplitArray;
var
i:integer;
begin
if length(Delimiter)>0 then
self.Delimiter := Delimiter[1]
else
self.Delimiter := char(pchar(''));
self.DelimitedText := str;
setLength(result,count);
for i := 0 to count - 1 do
begin
result[i] := Strings[i];
end;
end;
function TSplit.SplitStr(str, Delimiter: string): TSplitArray;
var
temp:string;
i:integer;
ArraySize:integer;
begin
temp := str;
ArraySize := 0;
while pos(Delimiter,temp) > 0 do
begin
inc(ArraySize);
setLength(result,ArraySize);
result[high(result)] := copy(temp,1,pos(Delimiter,temp)-1);
System.delete(temp,1,pos(Delimiter,temp)+length(Delimiter)-1);
end;
if temp<>'' then
begin
inc(ArraySize);
setLength(result,ArraySize);
result[high(result)] := temp;
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
var
SplitArray:TSplitArray;
split:TSplit;
i:integer;
begin
split := TSplit.Create;
SplitArray := split.Split('I,am,a,boy!',',');
for i := low(SplitArray) to high(SplitArray) do
showmessage(SplitArray[i]);
SplitArray := split.SplitStr('I,,am,,a,,boy!',',,');
for i := low(SplitArray) to high(SplitArray) do
showmessage(SplitArray[i]);
split.Free;
end;
Function TMulMonitor.SplitStr(st:string;sp:string):tstrings;
var
tmp:string;
i,FLen:integer;
begin
flen:=length(st);
splitstr:=tstringlist.Create ;
for i:=1 to flen do
begin
tmp:=tmp+copy(st,i,1);
if tmp<>sp then
begin
if copy(st,i,1)=sp then
begin
splitstr.add(copy(tmp,1,length(tmp)-1));
tmp:='';
end;
end
else
tmp:='';
application.ProcessMessages;
end;
splitstr.add(tmp);
end;
我转成tstringlist的了,转数组也是一样的
procedure TForm1.Button1Click(Sender: TObject);
const
a = 'I am a programer';
var
s: TStringList;
i: Integer;
begin
s:=TStringList.Create;
ExtractStrings([' '], [], PChar(a), s);
for i:=0 to s.Count-1 do
showmessage(s[i]);
s.Free;
end;
procedure TForm1.Split(Mstr:String; Sstr: String; var Darray: array of string);
var
i,k,m:integer;
tStr:String;
begin
k:=0;
m:=Length(Mstr);
for i:=1 to m do
begin
if (Mstr[i] = Sstr[1]) or (i=m) then
begin
Darray[k]:=tStr;
tStr:='';
k:=k+1;
end
else
tStr:=tStr+Mstr[i];
end;
end;
//-调用
procedure TForm1.Button1Click(Sender: TObject);
var
a:string;
s:array [0..5] of string;
begin
a:='I am a programer';
self.Split(a,' ',s);
showmessage('ok');
end;