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)
,但这执行了完整的字符串比较,即仅搜索这是一个字符串才会返回 true。
有什么建议吗?
未集成,但您可以在 Text 属性上使用 Pos 函数:
Pos('This is a', List.Text)
如果您希望集成它,则可以为TStrings创建一个类帮助程序。
不是直接的,不是。 您必须:
1) 在 Text
属性上调用 Pos()
,如果有很多字符串,则效率不高。
2)手动循环列表,在每个String
上调用Pos()
。 更高效,但也更编码。
3)从TStringList
派生一个新类并覆盖其虚拟CompareStrings()
方法以根据需要比较字符串(默认实现简单调用AnsiCompareStr()
或AnsiCompareText()
,具体取决于CaseSensitive
属性)。 如果找到匹配项,则返回 0。 然后,您可以使用 TStringList.Find()
方法,该方法在内部调用CompareStrings()
(请注意,TStringList.Sort()
也是如此,但如果改为调用 TStringList.CustomSort()
,则可以避免这种情况)。