指定した文字列が対象文字列の中にいくつ存在するかをチェックするについて

解決


ガオ~  2020-08-15 13:47:52  No: 148997

こんばんは。
以下の環境でプログラム作成しています初心者です。

指定した文字列('-')が対象文字列('AAA-BBB-CCC-DDD-EEE')の中にいくつ存在するか(答え:4つ)わかる
関数はありますか?

アドバイスを頂けましたらとっても助かります。
よろしくお願いいたします。

Delphi Tokyo Enter 64bit
Windows 10 PRO


HFUKUSHI  2020-08-15 15:14:52  No: 148999

直接的にそのような動作をするものはないですね。

案1: Pos http://docwiki.embarcadero.com/Libraries/Tokyo/ja/System.Pos で文字列末尾までスキャンする
procedure TForm1.Button1Click(Sender: TObject);
var
  Source: String;
  Sub: String;
  I: Integer;
  Count: Integer;
begin
  Source := 'AAAA-BBBB-CCCC-DDDD-EEEE';
  Sub := '-';
  Count := 0;
  I := 1;
  while True do
  begin
    I := Pos(Sub,Source,I);
    if I = 0 then
    begin
      Break;
    end;
    Count := Count + 1;
    I := I + Length(Sub);
  end;
  Label1.Caption := IntToStr(Count);
end;

案2: 正規表現ライブラリ http://docwiki.embarcadero.com/Libraries/Tokyo/ja/System.RegularExpressions.TRegEx を使う
uses
  System.RegularExpressions;

procedure TForm1.Button2Click(Sender: TObject);
var
  Source: String;
  Sub: String;
  Count: Integer;
begin
  Source := 'AAAA-BBBB-CCCC-DDDD-EEEE';
  Sub := '-';
  Count := TRegEx.Matches(Source,Sub).Count;
  Label1.Caption := IntToStr(Count);
end;


ガオ~  2020-08-15 17:56:31  No: 149000

HFUKUSHIさん 毎々のご回答ありがとうございます。
案1と案2、二つとも試させていただきました。
どちらにしようか迷いましたが
案1を使うことにしました。
助かりました。
今後ともよろしくお願いいたします。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加