有很多方法可以比较现代Delphi中的字符串(比如2010-XE3):
原则上,有人可以给出(或指向)这些方法的描述吗?
到目前为止,我已经认为AnsiCompareStr在Windows上调用CompareString,这是一种“文本”比较(即考虑到unicode组合字符等)。简单的CompareStr不这样做,而是似乎做了二进制比较。
但是CompareStr和UStrCmp有什么区别?在UStrCmp和LStrCmp之间?它们都产生相同的结果吗?这些结果是否会在Delphi版本之间发生变化?
我问,因为我需要进行比较,这将始终产生相同的结果,因此使用一个版本的Delphi构建的应用程序中的索引与使用另一个版本构建的代码保持一致。
答案 0 :(得分:7)
AnsiCompareStr被指定为考虑区域设置,并且无论Delphi版本如何都应返回相同的结果,但可能会根据Windows版本和/或设置返回不同的结果。CompareStr是纯二进制文件比较:“比较操作基于每个字符的16位序数值,不受当前语言环境的影响”(对于CompareStr(const S1, S2: string)
重载)。 UStrCmp也使用纯二进制比较:“根据构成字符串的字符的序数值来比较字符串。”所以后两者之间不应该有区别。它们返回结果的方式是不同的,因此需要两个实现(尽管可以让一个实现依赖另一个)。
至于LStrCmp
和UStrCmp
之间的差异,LStrCmp
需要AnsiString
s,UStrCmp
需要UnicodeString
s。两个字符(假设A和B)完全有可能在错误命名的“ANSI”代码页中被排序为A< B,但以Unicode排序为A> B.您几乎应该只使用适合您所拥有数据的比较。