如何检查数组中是否存在字符串?

时间:2011-06-12 03:47:11

标签: arrays string delphi

我有这段代码:

var
  ExtString: string;
const
  Extensions : array[0..4] of string = ('.rar', '.zip', '.doc', '.jpg', '.gif');

if ExtString in Extensions then

在最后一行,我收到一个错误:

  

[DCC错误] E2015运营商('然后')不适用于此操作数类型

我想我不能这样做,所以我怎样才能正确执行我的任务呢?

4 个答案:

答案 0 :(得分:22)

如您所见,无法使用in检查字符串数组中的字符串。

您可以使用此函数代替if语句。

function StrInArray(const Value : String;const ArrayOfString : Array of String) : Boolean;
var
 Loop : String;
begin
  for Loop in ArrayOfString do
  begin
    if Value = Loop then
    begin
       Exit(true);
    end;
  end;
  result := false;
end;

你可以这样称呼它。

if StrInArray(ExtString,Extensions) then

StrUtils.pas已定义此内容。

function MatchStr(const AText: string; const AValues: array of string): Boolean; 

答案 1 :(得分:9)

从常量数组​​初始化TStringList实例并使用IndexOf()。

答案 2 :(得分:0)

有时候最简单的解决方案并不是最明显的

var
  ExtString: string;
const
  Extensions : string = ('.rar,.zip,.doc,.jpg,.gif');

if Pos(ExtString, Extensions) > 0 then

答案 3 :(得分:-1)

您可以使用IndexStr中的函数IndexText(区分大小写)或System.StrUtils(区分大小写)在数组中查找字符串并检索索引。

var
  ExtString: string;
const
  Extensions : array[0..4] of string = ('.rar', '.zip', '.doc', '.jpg', '.gif');
begin
  if (IndexStr(ExtString, Extensions) <> -1) then
    ShowMessage('Finded')
  else
    ShowMessage('Not finded');

Link to help in docwiki from embarcadero