00:IFCSUM:MANIFEST:9:83446660-8:0:0'
怎么知道这个字符串中冒号的个数?

解决方案 »

  1.   

    function GetStringTokenCount(const StrSource:String;const StrToken:String=';'):Integer;
    begin
       Result:=Length(StrSource)-Length(StringReplace(StrSource,StrToken,[rfReplaceAll]));
       If Result>0 then Result:=Result/Length(StrToken);
    end;
      

  2.   

    function GetStringTokenCount(const StrSource:String;const StrToken:String=':'):Integer;
    begin
       Result:=Length(StrSource)-Length(StringReplace(StrSource,StrToken,'',[rfReplaceAll]));
       If Result>0 then Result:=Result div Length(StrToken);
    end;调用:
    ShowMessage(IntToStr(GetStringTokenCount('00:IFCSUM:MANIFEST:9:83446660-8:0:0''')));结果为:6
      

  3.   

    还有更漂亮的解决办法!!嘿嘿~~procedure TForm1.Button1Click(Sender: TObject);
    var
      tempStrList: TStringList;
    begin
      tempStrList := TStringList.Create;
      tempStrList.Delimiter := ':';
      tempStrList.DelimitedText := Edit1.Text;
      ShowMessage('is:' + IntToStr(tempStrList.Count - 1));
      tempStrList.Free;
    end;
      

  4.   

    再一个创建一个TStringList对象是需要相应资源耗用的,并且这份耗用不小。
      

  5.   

    是有可能会不精确哈 hehe^^还可以用这个//===========================  ListCount =====================================//
    function ListCount(mList: string; mDelimiter: string ): Integer;
    { 返回列表数 }
    var
      I, L: Integer;
      mListC: String;
    begin
      Result := 0;
      if mList = '' then Exit;
      mListC := mList;
      L := Length(mList);
      I := Pos(mDelimiter , mList);
      while I > 0 do begin
        mList := Copy(mList , I + Length(mDelimiter), L);
        I := Pos(mDelimiter , mList);
        Inc(Result);
      end;
      Inc(Result);
      if PChar(mListC)[0] = mDelimiter then
        Result := Result - 1;
      if PChar(mListc)[Length(mListc)-1] = mDelimiter then
        Result := Result - 1;
    end;使用可以这样ShowMessage(IntToStr(ListCount(Edit1.Text, ':'));
      

  6.   

    TStringList,只适合被统计的字符只有一个的情况,如果要查里面有多少个'abcd'之类的就不能用了最简单普遍的还是 
    (Length(b)- length(AnsiReplaceStr(b,fromstr,''))) div length(fromstr)