C#中具有特殊char排序问题的字符串

时间:2017-04-24 14:39:36

标签: c#

我试图对包含 - 和/的字符串进行排序。但我无法理解输出

Console.WriteLine(@"a-b".CompareTo(@"a/b"));
Console.WriteLine(@"-b".CompareTo(@"/b"));
Console.WriteLine(@"a-".CompareTo(@"a/"));
Console.WriteLine(@"-".CompareTo(@"/"));
Console.WriteLine(@"-/".CompareTo(@"/-"));
Console.WriteLine(@"--".CompareTo(@"//"));

输出

1
1
-1
-1
1
-1

虽然我希望所有输出都是1.我误解了这里的情况吗?感谢

1 个答案:

答案 0 :(得分:2)

来自MSDN

  

字符集包括可忽略的字符CompareTo(String)   方法在执行时不考虑这些字符   文化敏感的比较。例如,如果以下代码是   在.NET Framework 4或更高版本上运行,比较" animal"同   " ani-mal" (使用软连字符或U + 00AD)表示两者   字符串等效

这意味着如果您以文化敏感的方式进行比较,则忽略-

这将给出您的预期结果(全部为负数):

Console.WriteLine(String.CompareOrdinal(@"a-b", @"a/b"));
Console.WriteLine(String.CompareOrdinal(@"-b",@"/b"));
Console.WriteLine(String.CompareOrdinal(@"a-",@"a/"));
Console.WriteLine(String.CompareOrdinal(@"-",@"/"));
Console.WriteLine(String.CompareOrdinal(@"-/",@"/-"));
Console.WriteLine(String.CompareOrdinal(@"--",@"//"));