比如说一个'ab,cd,efg,h,ijk'这样的一个string,
java中可以用split()方法拆分,
那在delphi中怎样按照','号把它拆分成多个string啊?朋友们帮帮忙啊,多谢了

解决方案 »

  1.   

    procedure StrToStrings(S, Sep: string;
      const List: TStrings);
    var
      I, L: Integer;
      Left: AnsiString;
    begin
      Assert(List <> nil);
      List.Clear;
      L := Length(Sep);
      I := Pos(Sep, S);
      while (I > 0) do
      begin
        Left := LeftStr(S, I - 1);
        List.Add(Left);
        Delete(S, 1, I + L - 1);
        I := Pos(Sep, S);
      end;
      if S <> '' then
        List.Add(S);
    end;
      

  2.   

    最简单的方法,用TstringList对象就可以了。
    TStringList对象有个CommaText属性,你只要把你的String赋给它就可以从TStringList中读取了。
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      s: string;
      i: integer;
      StrList: TStringList;
      tempi: integer;
    begin
      Strlist:=TStringList.Create;
      StrList:=TStringList.Create;
      S := 个'ab,cd,efg,h,ijk';
      tempi:=0;  for i:=0 to Length(s) -1 do
        if  not (S[i] in ['a'..'z' ,'A'..'Z']) then
        begin
          StrList.Add(Copy(s,tempi,i-tempi));
          tempi:=i;
        end;  ShowMessage(StrList.Text);end;
      

  4.   

    //****************************************************************//
    //  函数:已Border字符为标准提取字符串                            //
    //  范围:字符串中有特殊的字符进行分界                            //
    //  描述:SourStr 比较字符;Border 分界字符;                     //
    //        Index 分割后的字符串的顺序号(int)                     //
    //****************************************************************//function SubStr(SourStr: string; Border: Char;
      Index: integer): string;var
        TempStr : string;
        I : integer;
    begin
        TempStr := SourStr;    if Pos(Border,SourStr)=0 then
        begin
            if Length(SourStr) > 0 then Result := SourStr
            else Result := '';
        end
        else
        begin
        try
          for I := 1 to Index - 1 do
          begin
             if Pos(Border,TempStr) = 0 then
             begin
                Result := '';
                Exit;
             end;
             Delete(TempStr,1,Pos(Border,TempStr));
             TempStr := Trim(TempStr);
          end;
        except
          result := '';
          Exit;
        end;
        if Pos(Border,TempStr)=0 then
          Result := TempStr
        else
          Result := Copy(TempStr,1,Pos(Border,TempStr) - 1);
        end;
    end;//****************************************************************//
    //  函数:判断输入(英文)字符判断有几个相同的字符                  //
    //  范围:字符串中必须有空格来断开                                //
    //  描述:inputstr 比较字符;sourStr 原字符;                     //
    //        Repeatcount 几个相同的字符(int)                       //
    //  例子:Engfindepeat(‘meng xian bao ’,'meng xian ' ,2 )       //
    //        返回 false;                                            //
    //        说明:'meng xian bao'中有‘meng xian ’ 的字符已经达到了//
    //             2 个返回false,否则返回true.                        //
    //****************************************************************//
    function Engfindepeat(inputStr, sourStr: String;
      repeatcount: Integer): Boolean;
    var
      Sstr,Dstr : String;
      i,j : Integer;
      ItemString1,ItemString2:TStringList;
      sign:Integer;
    begin
         result:=true ;
         ItemString1:=TStringList.Create;
         try
             ItemString1.Clear;
             if Pos(' ',SourStr) > 0 then
             begin
                  i := 1;
                  while (SubStr(SourStr,' ',i) <> '') do
                  begin
                    Itemstring1.Add(SubStr(SourStr,' ',i));
                    i := i+1;
                  end;
             end
             else
                Itemstring1.Add(SourStr);
           //--------------
             ItemString2:=TStringList.Create;
             try
                 ItemString2.Clear;
                 if Pos(' ',inputStr) > 0 then
                 begin
                      i := 1;
                      while (SubStr(inputStr,' ',i) <> '') do
                      begin
                        Itemstring2.Add(SubStr(inputStr,' ',i));
                        i := i+1;
                      end;
                 end
                 else
                    Itemstring2.Add(Sstr);          sign:=0;
             for   j:=0 to ItemString2.Count-1 do
             begin
                if ItemString1.IndexOf(ItemString2.Strings[j])<> -1  then
                begin
                    sign:=Sign+1;
                end;
             end;
             if Sign>=repeatcount then
             begin
                result:=false;
             end;          finally
                FreeAndNil(ItemString2);
             end;     finally
             FreeAndNil(itemString1);
         end;end;
    //****************************************************************//
    //  函数:把一个中文字符串分成几个字符的组合储存在StringList中    //
    //  范围:可以判断中文与英文混合,返回Stringlist需要在外面声明才   //
    //        可以调用                                                //
    //  描述:inputstr 目标字符;BoxInt几个为一组;                   //
    //        ItemList 返回的TStringList                              //
    //  例子:findeString(‘怎样编程实现发电子邮件’, 4,            //
    //        ItemList:TstringList);                                  //
    //****************************************************************//
    procedure findeString(inputStr: String; BoxInt: integer; ItemList:TstringList);
    var
      input:WideString;
      i:Integer;
      m,n:Integer;
    begin
      input:=inputStr;
      m:=0;
      for i:=1 to (length(input)-Boxint) do
      begin
          if i<=length(input)-Boxint then
          begin
              if m=0 then  ItemList.Add(copy(input,1,Boxint))
              else
              begin
              ItemList.Add(copy(input,i,Boxint));
              end;
              m:=m+1;
          end;
      end;
    end;
    //****************************************************************//
    //  函数:判断两个中文字符串连续几个字符串相同的                  //
    //  范围:可以判断中文与英文混合,返回Stringlist需要在外面声明才   //
    //        可以调用                                                //
    //  描述:inputStr 目标字符;sourStr原有字符BoxInt几个为一组;    //                         //
    //        repeatcount 重复几次报错 .                              //
    //  例子:Chafinepeat('怎样编程实现发电子邮件',                   //
    //        '怎样编程实现发电子邮件',                               //
    //        2,1);
    //  inputStr和sourStr没有两个或两个以上的重复的连续字符返回true.反之为false  //              //
    //****************************************************************//
    function Chafindepeat(inputStr, sourStr: String;
      BoxInt,repeatcount: Integer): Boolean;
    var
        ItemList1,ItemList2 :TStringList;
        sign,i:Integer;
    begin
        result:=true;
        ItemList1:=TStringList.Create;
        try
           findeString(inputStr, BoxInt, ItemList1);
           ItemList2:=TStringList.Create;
              try
                 findeString(SourStr,BoxInt,ItemList2 );
                 //----------------
                 sign:=0;
                 for   i:=0 to ItemList2.Count-1 do
                 begin
                    if Itemlist1.IndexOf(ItemList2.Strings[i])<> -1  then
                    begin
                        sign:=Sign+1;
                    end;
                 end;             if Sign>=repeatcount then
                 begin
                    result:=false;
                 end;
                 //----------------
              finally
                FreeAndNil(ItemList2);
              end;
        finally
           FreeAndNil(ItemList1);
        end;end;
      

  5.   

    function SplitString(const source,ch:string):tstringlist;
    var
     temp:string;
     i:integer;
    begin
     result:=tstringlist.Create;
     temp:=source;
     i:=pos(ch,source);
     while i<>0 do
     begin
       result.Add(copy(temp,0,i-1));
       delete(temp,1,i);
       i:=pos(ch,temp);
     end;
     result.Add(temp);
    end;
    调用:
    s:=splitstring('afsdfsdaaa|bbfdsfsdb|ccc','|');
    for i:=0 to s.Count-1 do
     b:=b+s.Strings[i]+#13;
    showmessage(b);
    s.free;