procedure TForm1.FormCreate(Sender: TObject); begin edit1.Text:='test, for 花好月圆'; end;procedure TForm1.Button2Click(Sender: TObject); var i,j:integer; begin label1.Caption :=''; j:=Length(edit1.Text ); for i:=0 to j do begin if not ((edit1.Text[i]) in [',']) then label1.Caption :=label1.Caption +edit1.Text[i]; end; end;
我觉得这样最简单: var sl: TStringList; i : Integer; begin sl := TStringList.Create; sl.Delimiter :=','; sl.DelimitedText := 'sgdfg,dfgdfg,dfgdfg,dfgdfgdf'; for i :=0 to sl.Count -1 do ShowMessage(sl.Strings[i]); sl.Free; end;
>>>我晕,运行上面的代码试试啦~~~ edit1.Text:='test, for 花,好月,圆';得到的结果: test for 花好月圆
procedure TForm1.Button2Click(Sender: TObject); var i,j:integer; begin label1.Caption :=''; j:=Length(edit1.Text ); for i:=0 to j do begin if not ((edit1.Text[i]) in [',']) then label1.Caption :=label1.Caption +edit1.Text[i]; end; end;你可以再优化、修改
edit1:='test, for 花,好月,圆';ExtractStrings([','],[],pchar(str),memo1.lines);你要的东东给你一行一行放在memo里了。
function DivString(Str: string; DivChar: TChar): TStrings; var tempS: string; i: Integer; begin Result := TStringList.Create; tempS := ''; for i := 1 to Length(Str) do if Str[i] = DivChar then begin Result.Add(tempS); tempS := ''; end else tempS := tempS + Str[i]; if tempS <> '' then Result.Add(tempS); end;
function DivString(Str: string; DivChars: array of Char): TStrings; var tempS: string; i: Integer; function CharExists(xChar: Char; Chars: array of Char): Boolean; var i: Integer; begin Result := False; for i := Low(Chars) to High(Chars) do if xChar = Chars[i] then Result := True; end; begin Result := TStringList.Create; tempS := ''; for i := 1 to Length(Str) do if CharExists(Str[i], DivChars) then begin Result.Add(tempS); tempS := ''; end else tempS := tempS + Str[i]; if tempS <> '' then Result.Add(tempS); end;//example: procedure TForm1.Button1Click(Sender: TObject); var Chars: array[1..3] of Char; begin Chars[1] := ','; Chars[2] := '.'; Chars[3] := ';'; Edit1.Text := 'test1,test2.test3;test4'; Memo1.Lines.Clear; Memo1.Lines := DivString(Edit1.Text, Chars); end;
begin
edit1.Text:='test, for 花好月圆';
end;procedure TForm1.Button2Click(Sender: TObject);
var
i,j:integer;
begin
label1.Caption :='';
j:=Length(edit1.Text );
for i:=0 to j do
begin
if not ((edit1.Text[i]) in [',']) then
label1.Caption :=label1.Caption +edit1.Text[i];
end;
end;
var
sl: TStringList;
i : Integer;
begin
sl := TStringList.Create;
sl.Delimiter :=',';
sl.DelimitedText := 'sgdfg,dfgdfg,dfgdfg,dfgdfgdf';
for i :=0 to sl.Count -1 do
ShowMessage(sl.Strings[i]);
sl.Free;
end;
小弟太菜了,能举个例子么?如果不知道有几个逗号怎么半?
>>>我晕,运行上面的代码试试啦~~~ edit1.Text:='test, for 花,好月,圆';得到的结果:
test for 花好月圆
var
i,j:integer;
begin
label1.Caption :='';
j:=Length(edit1.Text );
for i:=0 to j do
begin
if not ((edit1.Text[i]) in [',']) then
label1.Caption :=label1.Caption +edit1.Text[i];
end;
end;你可以再优化、修改
edit1:='test, for 花,好月,圆';ExtractStrings([','],[],pchar(str),memo1.lines);你要的东东给你一行一行放在memo里了。
var
tempS: string;
i: Integer;
begin
Result := TStringList.Create;
tempS := '';
for i := 1 to Length(Str) do
if Str[i] = DivChar then
begin
Result.Add(tempS);
tempS := '';
end
else tempS := tempS + Str[i];
if tempS <> '' then Result.Add(tempS);
end;
var
tempS: string;
i: Integer;
function CharExists(xChar: Char; Chars: array of Char): Boolean;
var
i: Integer;
begin
Result := False;
for i := Low(Chars) to High(Chars) do
if xChar = Chars[i] then Result := True;
end;
begin
Result := TStringList.Create;
tempS := '';
for i := 1 to Length(Str) do
if CharExists(Str[i], DivChars) then
begin
Result.Add(tempS);
tempS := '';
end
else tempS := tempS + Str[i];
if tempS <> '' then Result.Add(tempS);
end;//example:
procedure TForm1.Button1Click(Sender: TObject);
var
Chars: array[1..3] of Char;
begin
Chars[1] := ',';
Chars[2] := '.';
Chars[3] := ';';
Edit1.Text := 'test1,test2.test3;test4';
Memo1.Lines.Clear;
Memo1.Lines := DivString(Edit1.Text, Chars);
end;
TStrings有个属性叫CommaText专门用来处理逗号分隔的串的,默认分隔符是逗号,转义字符是双引号,用另外一个属性叫DelimitedText,可以设置分隔符和转义字符。
有现成的,干嘛不用?BTW:用TStrings做返回值类型其实很不好,因为要考虑释放的问题,很容易内存泄漏。
CommaText好像也不能同时处理多个分隔符的情况
他说的问题真的是很浅显易懂
我想这样的回答才是最好的