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;
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
是有可能会不精确哈 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, ':'));
TStringList,只适合被统计的字符只有一个的情况,如果要查里面有多少个'abcd'之类的就不能用了最简单普遍的还是 (Length(b)- length(AnsiReplaceStr(b,fromstr,''))) div length(fromstr)
begin
Result:=Length(StrSource)-Length(StringReplace(StrSource,StrToken,[rfReplaceAll]));
If Result>0 then Result:=Result/Length(StrToken);
end;
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
var
tempStrList: TStringList;
begin
tempStrList := TStringList.Create;
tempStrList.Delimiter := ':';
tempStrList.DelimitedText := Edit1.Text;
ShowMessage('is:' + IntToStr(tempStrList.Count - 1));
tempStrList.Free;
end;
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, ':'));
(Length(b)- length(AnsiReplaceStr(b,fromstr,''))) div length(fromstr)