Delphi: TStringList.Contains?

8
在Delphi 2007中,是否有集成的解决方案可以检查TStringList是否包含某个值的一部分?
例如:
List.AddObject('This is a string', customStringObject1); 
List.AddObject('This is a mushroom', customStringObject2); 
List.AddObject('Random stuff', customStringObject3); 

搜索 "This is a" 应该会返回 "true",因为前两个元素部分包含了这个字符串。

到目前为止,我所知道的唯一方法是使用 TStringList.find(string,integer),但是它执行的是完整的字符串比较,也就是说,只有当搜索 This is a string 时才会返回 true。

有什么建议吗?

2个回答

11

虽然没有集成,但您可以在Text属性上使用Pos函数:

Pos('This is a', List.Text)

如果您想要将其集成,可以为TStrings创建一个类助手。


5

没有直接的方法。你需要做以下几件事情:

1) 在 Text 属性上调用 Pos(),但如果有很多字符串,这并不高效。

2) 手动循环遍历列表,对每个 String 调用 Pos()。虽然更加高效,但也需要编写更多代码。

3) 从 TStringList 派生一个新类,并重写其虚拟的 CompareStrings() 方法,以任何你想要的方式进行字符串比较(默认实现简单地调用 AnsiCompareStr()AnsiCompareText(),具体取决于 CaseSensitive 属性)。如果找到匹配项,则返回 0。然后可以使用 TStringList.Find() 方法,在内部调用 CompareStrings()(请注意,TStringList.Sort() 也会调用它,但如果使用 TStringList.CustomSort() 可以避免这种情况)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接