function get_divide_str(s:string; no: integer; c:Char): string;
var
len, start, found_n: integer;
begin
len := length(s);
found_n := 0; //找到包含分割符的开始点-->start
start := 0;
while (found_n < no - 1) do
begin
inc(start) ;
if start > len then start := len;
if (s[start] = c) or (start = len) then inc(found_n);
end; //准备取字符串的起点
result := '';
inc(start);
// if start>len then start:=len; while (start <= len) and not (s[start] = c) do
begin
result := result + s[start];
inc(start);
end;
;
result := trim(result);
end;
通过以上函数可以实现以下目的 s:='中国' + '|' + '美国' + '|' + '日本' showmessage(get_divide_str(s,1,'|')); 显示:"中国" 。 如果是2就显示"美国"是3就显示"日本"
但是如果将 '|' 单竖 改成 '||' 就不行了要怎么改才能达到上面的效果也就是 {s:='中国'+'||'+'美国'+'||'+'日本' showmessage(get_divide_str(s,1,'|')); 显示:"中国"如果是2就显示"美国"是3就显示"日本" }
请高手指点。。急....................
var
len, start, found_n: integer;
begin
len := length(s);
found_n := 0; //找到包含分割符的开始点-->start
start := 0;
while (found_n < no - 1) do
begin
inc(start) ;
if start > len then start := len;
if (s[start] = c) or (start = len) then inc(found_n);
end; //准备取字符串的起点
result := '';
inc(start);
// if start>len then start:=len; while (start <= len) and not (s[start] = c) do
begin
result := result + s[start];
inc(start);
end;
;
result := trim(result);
end;
通过以上函数可以实现以下目的 s:='中国' + '|' + '美国' + '|' + '日本' showmessage(get_divide_str(s,1,'|')); 显示:"中国" 。 如果是2就显示"美国"是3就显示"日本"
但是如果将 '|' 单竖 改成 '||' 就不行了要怎么改才能达到上面的效果也就是 {s:='中国'+'||'+'美国'+'||'+'日本' showmessage(get_divide_str(s,1,'|')); 显示:"中国"如果是2就显示"美国"是3就显示"日本" }
请高手指点。。急....................
c: Char): string;
var
strlist: TStringList;
begin
strlist := TStringList.Create;
try
strlist.Delimiter := c;
strlist.DelimitedText := s;
result := strlist[no-1];
finally
strlist.free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s:='中国' + '|' + '美国' + '|' + '日本';
showmessage(get_divide_str(s,1,'|'));
showmessage(get_divide_str_new(s,3,'|'));
end;
var
s: string;
list: TStringList;
begin
s:='中国'+'||'+'美国'+'||'+'日本';
list := tstringlist.create;
list.DelimitedText := s;
list.Delimiter := '||';
showmessage(list[0]); //中国
showmessage(list[1]); //美国
showmessage(list[2]); //日本
list.free
end;一定要大力普及TStringList的这个应用,发现身边很多朋友都喜爱直接拆字符串,多麻烦...
1. TStringList.Delimiter是Char类型, 无法赋给它'||'这个String。
2. 当赋给DelimitedText的字符串中出现空格时, 空格会作为分隔符(哪怕你设置的Delimiter不是空格)而得到你不想得到的结果。
3. 应该先给Delimiter赋值, 然后再给DelimitedText赋值。
function GetSubStr(S, Delimiter: String; Index: Integer): String;
var
i, j, k: Integer;
begin
Result := '';
if Index < 1 then exit;
j := 1;
k := Pos(Delimiter, S);
if k < j then k := Length(S) + 1;
for i := 2 to Index do
begin
j := k + Length(Delimiter);
if j > Length(S) then exit;
k := PosEx(Delimiter, S, j);
if k < j then k := Length(S) + 1;
end;
Result := Copy(S, j, k - j);
end;procedure TForm1.FormCreate(Sender: TObject);
var
s: string;
begin
s := '中 国' + '||' + '美国' + '||' + '日本';
showmessage(GetSubStr(s, '||', 1));
showmessage(GetSubStr(s, '||', 2));
showmessage(GetSubStr(s, '||', 3));
showmessage(GetSubStr(s, '||', 4));
end;
此方法即可,使用TStringList.Delimiter来分隔字符串