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。

有什么建议么?

4

2 回答 2

10

未集成,但您可以在 Text 属性上使用 Pos 函数:

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

如果你希望它被集成,你可以为 TStrings 创建一个类助手。

于 2012-10-09T09:20:41.573 回答
5

不直接,不。您将不得不:

1)调用属性,如果你有很多字符串Pos()Text这效率不高。

2)手动遍历列表,调用Pos()每个String. 效率更高,但编码也更多。

3) 派生一个新类TStringList并覆盖其虚拟CompareStrings()方法以根据需要比较字符串(默认实现简单调用AnsiCompareStr()AnsiCompareText(),具体取决于CaseSensitive属性)。如果找到匹配项,则返回 0。然后,您可以使用该TStringList.Find()方法,该方法在CompareStrings()内部调用(要小心,也是如此TStringList.Sort(),但如果您改为调用,则可以避免这种情况TStringList.CustomSort())。

于 2012-10-09T21:26:58.220 回答