我想做这样的事情:
Result = 'MyString' in [string1, string2, string3, string4];
这不能用于字符串,我不想做这样的事情:
Result = (('MyString' = string1) or ('MyString' = string2));
另外我认为创建一个StringList来做这件事太复杂了。
还有其他方法可以达到这个目的吗?
感谢。
答案 0 :(得分:56)
你可以使用AnsiIndexText(const AnsiString AText,字符串AValues的const数组):integer或MatchStr(const AText:string; const AValues:string of array):Boolean;
像
这样的东西Result := (AnsiIndexText('Hi',['Hello','Hi','Foo','Bar']) > -1);
或
Result := MatchStr('Hi', ['foo', 'Bar']);
AnsiIndexText返回0偏移量 找到的第一个字符串的索引 与AText匹配的AValues 的不区分大小写即可。如果是字符串 由AText指定没有 (可能不区分大小写)匹配 AValues,AnsiIndexText返回-1。 比较基于当前 系统区域设置。
MatchStr确定是否有任何 数组AValues中的字符串匹配 AText使用大小写指定的字符串 敏感比较。它返回true 如果至少有一个字符串 数组匹配,如果没有,则返回false 字符串匹配。
注意AnsiIndexText
不区分大小写,MatchStr
区分大小写,所以我猜这取决于您的使用情况
编辑:2011-09-3 :刚刚找到这个答案,并且我想补充说明,在Delphi 2010中还有一个MatchText
函数与{ {1}}但不区分大小写。 - 拉里
答案 1 :(得分:7)
Burkhard的代码有效,但即使找到了匹配项,也会在列表上不必要地进行迭代。
更好的方法:
function StringInArray(const Value: string; Strings: array of string): Boolean;
var I: Integer;
begin
Result := True;
for I := Low(Strings) to High(Strings) do
if Strings[i] = Value then Exit;
Result := False;
end;
答案 2 :(得分:1)
这是一个完成工作的功能:
function StringInArray(Value: string; Strings: array of string): Boolean;
var I: Integer;
begin
Result := False;
for I := Low(Strings) to High(Strings) do
Result := Result or (Value = Strings[I]);
end;
实际上,您将MyString与Strings中的每个字符串进行比较。只要找到一个匹配,就可以退出for循环。
答案 3 :(得分:-4)
你可以试试这个:
Result := Pos(MyString, string1+string2+string3+string4) > 0