在两个字符串的字符之间插入空格会修改它们的顺序



>我有 2 个相同长度的字符串。
我假设(可能是错误的(在每个字符串的每个字符之间插入一个空格不会改变它们的顺序。

var e1 = "12*4";  
var e2 = "12-4";  
Console.WriteLine(String.Compare(e1,e2)); // -1 (e1 < e2)
var f1 = "1 2 * 4";  
var f2 = "1 2 - 4";  
Console.WriteLine(String.Compare(f1,f2)); // +1 (f1 > f2)

如果我插入其他字符(例如 _ x(,则顺序会保留。

这是怎么回事?

提前谢谢。

如果使用序数比较,您将获得正确的结果。

原因是序号比较通过计算字符串对象中每个字符的数值来工作,因此插入空格不会有任何区别。

如果您使用其他类型的比较,则涉及其他内容。从文档中:

使用单词排序规则的操作执行区分区域性 比较,其中某些非字母数字 Unicode 字符可能 为他们分配了特殊的权重。使用单词排序规则和 特定区域性的约定,连字符 ("-"( 可能具有非常 分配给它的权重较小,以便"coop"和"co-op"显示在 彼此在排序列表中。

使用序号排序规则的操作根据 字符串。序号比较速度很快,但不区分区域性。什么时候 使用序号排序规则对以 Unicode 开头的字符串进行排序 字符 (U+(,字符串 U+xxxx 在字符串 U+yyyy 之前,如果 XXXX 的值在数值上小于 yyyy。

来自 MSDN:

比较使用当前区域性来获取特定于区域性的信息,例如大小写规则和各个字符的字母顺序。例如,区域性可以指定将某些字符组合视为单个字符,或者以特定方式比较大写和小写字符,或者字符的排序顺序取决于其前面或后面的字符。

比较字符串时,应调用 Compare(String, String, StringComparison( 方法,该方法要求显式指定该方法使用的字符串比较类型。

这表明存在一些文化问题,这意味着最后一个空格改变了两者的排序顺序。

最新更新