关于字符串比较方法

本文关键字:方法 比较 字符串 | 更新日期: 2023-09-27 18:27:47

一个奇怪的问题,我的代码是:

static void Main(string[] args)
{
    Console.WriteLine(string.Compare("-", "a"));//output -1
    Console.WriteLine(string.Compare("-d", "a"));//output 1
    Console.Read();
}

谁能告诉我为什么?

关于字符串比较方法

默认情况下,字符串比较使用特定于区域性的设置。这些设置允许对字母和符号应用不同的顺序和权重;例如,在使用大多数区域性设置进行排序时,"resume"answers"résumé"看起来会非常接近,因为"é"的顺序正好在"e"之后,而且在"f"之前,尽管Unicode代码页将é放在英语字母表的其余部分之后。类似地,非空格的符号在字符串中占据一个位置,但被视为"连接符"(如破折号、斜杠等)的符号被赋予较低的"权重",因此它们只被视为平局决胜符。这意味着"a-b"将在"ab"之后和"ac"之前排序,因为破折号不如字母重要。

你认为你想要的是"有序排序",即根据字符串中的第一个差异,根据Unicode代码页中不同字符的相对有序位置对字符串进行排序。这将把"-d"放在"a"之前,如果"-"也将放在"a"之前,因为破折号被认为是一个完整的"字符",并与相同位置的字符"a"进行比较。然而,在一个真实单词列表中,当在有序排序列表中时,这会将单词"重做"、"简历"、"松香"、"卢布"、"重做"answers"简历"按顺序排列,这在上下文中可能没有意义,当然对非英语使用者来说也没有意义。

它比较字符在彼此之间的位置。换句话说,"-"在"a"之前(小于)。

String.Compare()在比较时使用单词排序规则。请注意,这些都是相对位置。以下是MSDN中的一些信息。

条件

否定:strA小于trB
零:strA等于strB
阳性:strA大于trB

以上比较适用于此过载:

public static int Compare(
    string strA,
    string strB
)

-在.NET Framework的排序中被视为特例。此答案包含以下详细信息:https://stackoverflow.com/a/9355086/1180433