字符串部分比较

时间:2012-11-08 13:54:51

标签: c# .net string comparison

  

可能重复:
  Why does string.Compare seem to handle accented characters inconsistently?

我有以下代码

var s1 = "ABzzzzz2";
var s2 = "äbzzzzz1";

var cmp = StringComparison.InvariantCultureIgnoreCase;

Console.WriteLine(string.Compare(s1, 0, s2, 0, 7, cmp)); //prints -1
Console.WriteLine(string.Compare(s1, 0, s2, 0, 8, cmp)); //prints 1

如果第一个字符串的一部分小于第二个字符串的一部分,而整个第一个字符串大于整个第二个字符串,那怎么可能呢? 我已经在x64,.net 2.0,3.5,4.0

上测试了它

1 个答案:

答案 0 :(得分:1)

我的理论是算法首先规范化字符串,然后进行比较。根据这个“äbzzzzz1”归一化为“abzzzzz1”。标准化形式的第一次比较结果相等,但返回0将是不确定的,因为实际的字符串不相等。所以它恢复到序数比较和结果-1。

在第二种情况下,归一化后,很明显“abzzzzz2”大于“abzzzzz1”,因此结果为1.

这种方法也解释了this question中提到的案例 有关规范化详细信息,请检查MSDN page

相关问题