bugfix> string > 投稿

「G、H、1、AA、T、AAA、1、E、A、H、....」のようなフィールド/文字列を指定します。文字は、任意の組み合わせ/順序にすることができます。 「A」または「AA」だけを検索するときに、その文字列を検索してTrueを返すにはどうすればよいですか? つまり、「A」などの検索を実行する場合、EとHの間の「A」のみを検索する必要があります。 よろしく&TIA、 イアン

回答 2 件
  • 文字列を区切り文字で配列に単純に分割し、その配列を検索できます。

    function FindItem(const List, Item: string): Boolean;
    var
      SArr: TArray<string>;
      S: string;
    begin
      Result := False;
      //Separators could also be a parameter
      SArr := List.Split([',']);
      for S in SArr do
      begin
        //use S.Trim if needed
        //use AnsiSameText(S, Item) for case insensitive check
        if Item = S then
          Exit(True);
      end;
    end;
    
    

    データ内の複数のアイテムを検索する必要がある場合は、配列を並べ替えてバイナリ検索を使用できます。

    TArray.Sort<string>(SArr);
    Result := TArray.BinarySearch(SArr, Item, Tmp);
    
    

    別のアプローチは、単語境界のみの正規表現を使用して単語全体のみを検索することです

    Result := TRegex.IsMatch(List, '\bA\b');
    
    

  • たとえば TStringList.CommaText を使用して、この文字列をリストに分割します  (または、 StrUtils.SplitString() の配列に )。

    次に、リストを歩いてすべての文字列を確認します(または TStrings.IndexOf() を使用します)  -注: CaseSensitive を使用します  Remyがコメントで言及したように、プロパティ)。

    同じリストに対して多くのクエリを作成する場合-ソートして、効果的なバイナリ検索( TStringList.Find() )。

あなたの答え