Dephi 7帮助手册说StringReplace ...
返回一个字符串,其出现的一个子字符串被另一个子字符串替换...
如果Flags不包含rfReplaceAll,则StringReplace仅替换S中第一次出现的OldPattern.否则,StringReplace将NewPattern的所有实例替换为NewPattern.
声明,"否则,StringReplace用NewPattern替换OldPattern的所有实例"似乎是BOGUS语句,因为在下面的示例中,即使在我指示函数"替换'aa'的所有实例之后,"aa"的实例仍然存在(OldPattern)带'a'(NewPattern)"!
StringReplace('aaa aaa','aa','a',[rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)
如果德尔福手册是准确的,那么我应该得到'aa'作为最终结果.不幸的是,我得到'aa aa'.显然,并非所有"OldPattern"('aa')的实例都被替换.
这是一个错误,还是仅仅是对该功能的误导/不准确的描述?
Rob*_*edy 14
你误解了文档.如果用替换替换搜索字符串的实例的行为恰好创建了搜索字符串的另一个实例,则不会再次搜索它.搜索从替换文本的结尾继续.
该函数在输入字符串中S搜索目标字符串的所有实例.输入字符串未被修改.要获得预期的输出,它必须在结果中搜索目标字符串的实例,而不仅仅是在输入中.
想象一下,如果搜索和替换字符串是相同的.该函数可能永远不会返回,因为每次找到目标并替换它时,它都会找到目标文本的另一个副本.