PosEx,Pos都是在一个字符串中搜索子串返回其索引值
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfrmStrDemo = class(TForm) Edit1: TEdit; ListBoxMatch: TListBox; btnPos: TButton; btnPosEx: TButton; procedure btnPosClick(Sender: TObject); procedure btnPosExClick(Sender: TObject); private { Private declarations } public function CountSubStr(text,sub:string):integer; function CountSubStrEx(text,sub:string):integer; end; var frmStrDemo: TfrmStrDemo; implementation uses StrUtils; {$R *.dfm} procedure TfrmStrDemo.btnPosClick(Sender: TObject); begin ShowMessage('共有' +IntToStr(CountSubStr(ListBoxMatch.Items.Text,edit1.text))+'个'); end; procedure TfrmStrDemo.btnPosExClick(Sender: TObject); begin ShowMessage('共有' +IntToStr(CountSubStrEx(ListBoxMatch.Items.Text,edit1.text))+'个'); end; function TfrmStrDemo.CountSubStr(text, sub: string): integer; var nPos: Integer; begin Result := 0; nPos := Pos(sub,text); while nPos > 0 do begin INC(Result);//加1 text := Copy(text,nPos+Length(sub),MaxInt); nPos := Pos(sub,text); end; end; function TfrmStrDemo.CountSubStrEx(text, sub: string): integer; var nPos: Integer; begin Result := 0; nPos :=StrUtils.PosEx(sub,text,1); while nPos > 0 do begin INC(Result); nPos := StrUtils.PosEx(sub,text,nPos + Length (sub)) end; end; end.
object frmStrDemo: TfrmStrDemo Left = 0 Top = 0 Caption = 'frmStrDemo' ClientHeight = 202 ClientWidth = 447 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Edit1: TEdit Left = 127 Top = 8 Width = 121 Height = 21 TabOrder = 0 end object ListBoxMatch: TListBox Left = 0 Top = 0 Width = 121 Height = 202 Align = alLeft ItemHeight = 13 Items.Strings = ( 'one' 'two' 'three' 'four' 'five' 'six' 'seven' 'eight') TabOrder = 1 ExplicitLeft = 16 ExplicitTop = 32 ExplicitHeight = 113 end object btnPos: TButton Left = 254 Top = 8 Width = 83 Height = 25 Caption = 'Count with pos' TabOrder = 2 OnClick = btnPosClick end object btnPosEx: TButton Left = 341 Top = 8 Width = 98 Height = 25 Caption = 'Count with PosEx' TabOrder = 3 OnClick = btnPosExClick end end