给定字段/字符串,如' G,H,1,AA,T,AAA,1,E,A,H,....'。字符可以是任何组合/顺序。 如何搜索该字符串并在搜索“A' A'或者' AA'? 即如果搜索说'A',它应该只找到' A' E& E之间H。 问候& TIA, 伊恩
答案 0 :(得分:2)
将此字符串拆分为一个列表,例如使用TStringList.CommaText
(或者使用StrUtils.SplitString()
放入数组中。)
然后,只需遍历列表并检查每个字符串(或使用TStrings.IndexOf()
- 注意:它使用CaseSensitive
属性,正如Remy在评论中提到的那样。)
如果要对同一列表进行多次查询 - 对其进行排序并使用有效的二进制搜索(TStringList.Find()
)。
答案 1 :(得分:2)
您可以通过分隔符将字符串拆分为数组,并在该数组中搜索,例如
Charge
如果您需要在数据中搜索多个项目,可能需要对数组进行排序并使用二进制搜索。
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);