1. delphi的字符截取函数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’
~~~~~~~~~~~~~~~~~~~~~~~~~
function RightStr
(Const Str: String; Size: Word): String;
begin
if Size > Length(Str) then Size := Length(Str) ;
RightStr := Copy(Str, Length(Str)-Size+1, Size)
end;
function MidStr
(Const Str: String; From, Size: Word): String;
begin
MidStr := Copy(Str, From, Size)
end;
function LeftStr
(Const Str: String; Size: Word): String;
begin
LeftStr := Copy(Str, 1, Size)
end;
这几个函数经常结合Pos, Length, Copy使用
拆分字符串的函数
delphi中没有提供此类函数,从大富翁找了一个
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;
procedure TForm1.Button1Click(Sender: TObject);
var
ss : TStringList;
str,dec : string;
begin
str := '1111||2222||||3333|||4444||';
dec := '||';
ss := split(str,dec);
memo1.Lines.AddStrings(ss);
ss.Free;
end;
2.Delphi字符串分割函数
function TForm1.SplitString(Source,Deli:string):TStringList;//拆分字符串函数
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;
StringList.Add(source); //如果不存在分隔符时,直接作为项目添加
Result:=StringList; //设置返回类型
end;
用法如下:
procedure TForm1.Button2Click(Sender: TObject);
var
s:Tstringlist;
i:integer;
str:string;
begin
listbox2.Items.Clear;
s:=Tstringlist.Create;
str:=Edit1.Text;
try
s.Assign(Form1.SplitString(str,'^'));
for i:=0 to s.Count-1 do
listbox2.Items.Add(s.Strings[i]);
finally
freeandnil(s);
end;
另Delphi中自带一个分割字符串函数ExtractStrings
function ExtractStrings(Separators: TSysCharSet; WhiteSpace: TSysCharSet; Content: PAnsiChar; Strings: TStrings): Integer;
[参数注释]:
Separators 参数指定一组分割符,所有的子串都是用它们分割的。但是成对的引号内的分割符会被忽略(参看下面的例子)。
WhiteSpace 参数指定每个子串开头被忽略的字符s。
Content 参数就是被分割的“源”串了。
Strings 参数用于接收分割后的各个子串。它的原有内容不会被清空。别忘了Create哦。
另外,EctractStrings不会把(忽略WhiteSpaces后的)空串加入到Strings中。
[Example]
比如
ABC|... DEF|#### GHI|"不会被分开|# www.farproc.com"
要得到
ABC
DEF
GHI
不会被分开|# www.farproc.com
四个子串可以用下面的代码:
uses
Classes;
var
ASource: PChar;
AStr: String;
ACount: Integer;
AStrings: TStringList;
begin
ASource := 'ABC|... DEF|#### GHI|"不会被分开|# www.farproc.com"';
AStrings := TStringList.Create;
try
ACount := ExtractStrings(['|'], [' ', '#', '.'], ASource, AStrings);
{do any further processing}
/for AStr in AStrings do
// Writeln(AStr);
finally
AStrings.Free;
end;
Readln;
end.
====================
procedure TForm1.Button1Click(Sender:TObject); //方法1
var
s:TStringList;
i:integer;
begin
s := TStringList.Create;
s.Text := StringReplace('this is a phone', ' ', #13#10, [rfReplaceAll]);
for i := 0 to s.Count - 1 do
begin
Memo1.Lines.Add(s.Strings[i]);
end;
end;
procedure TForm1.Button2Click(Sender:TObject); //方法2
var
s:TStringList;
i:Integer;
begin
S := TStringList.Create;
S.Delimiter := ' ';
S.DelimitedText := 'this is a phone';
for i := 0 to S.Count - 1 do //此处不能有Begin~end;否则出错
Memo2.Lines.Add(s.Strings[i]);
S.Free;
end;
procedure TForm1.Button3Click(Sender: TObject); ////方法3
begin
ExtractStrings([' '],[],'this is a phone',Memo3.Lines );
end;