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就显示"日本"  } 
请高手指点。。急....................

解决方案 »

  1.   

    function TForm1.get_divide_str_new(s: string; no: integer;
      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;
      

  2.   


    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的这个应用,发现身边很多朋友都喜爱直接拆字符串,多麻烦...
      

  3.   


    1. TStringList.Delimiter是Char类型, 无法赋给它'||'这个String。
    2. 当赋给DelimitedText的字符串中出现空格时, 空格会作为分隔符(哪怕你设置的Delimiter不是空格)而得到你不想得到的结果。
    3. 应该先给Delimiter赋值, 然后再给DelimitedText赋值。
      

  4.   


    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;
      

  5.   

    还真忘记Delimiter是Char了,昏头了,不好意思。空格的那个问题,只要给要分割的项加个双引号即可,否则空格是会被认为是分割符。
      

  6.   


    此方法即可,使用TStringList.Delimiter来分隔字符串
      

  7.   

    怀疑楼上的到底有没有仔细看帖。能把 '!!' 赋值给Char类型?