我有两个长度相同的字符串。
我假设(可能是错误的)在每个字符串的每个字符之间插入一个空格不会改变它们的顺序。
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),则保留顺序。
怎么回事?
提前谢谢。
发布于 2017-07-25 14:57:56
如果您使用顺序比较,您将得到正确的结果。
原因是序数比较是通过计算string对象中每个字符的数值来实现的,因此插入空格不会产生任何影响。
如果使用其他类型的比较,还涉及到其他方面。从文件中:
使用word排序规则的操作执行区分区域性的比较,其中某些非字母数字Unicode字符可能具有分配给它们的特殊权重。使用单词排序规则和特定文化的约定,连字符("-")可能有一个很小的权重分配给它,这样"coop“和”coop“就会出现在排序列表中。 使用序号排序规则的操作根据字符串中每个字符的数值(Unicode代码点)执行比较。顺序比较快速,但文化不敏感。当使用序号排序规则对以Unicode字符(U+)开头的字符串进行排序时,如果xxxx的数值小于yyyy,则字符串U+xxxx位于字符串U+yyyy之前。
发布于 2017-07-25 14:48:08
来自MSDN:
比较使用当前区域性获取特定于区域性的信息,如大小写规则和单个字符的字母顺序。例如,区域性可以指定某些字符组合为单个字符,大写字符和小写字符以特定方式进行比较,或者字符的排序顺序取决于前面或后面的字符。 在比较字符串时,您应该调用Compare( string, String, StringComparison)方法,该方法要求显式指定该方法使用的字符串比较类型。
这表明,存在一些文化问题,这意味着最后的空间改变了两者的排序顺序。
https://stackoverflow.com/questions/45306177
复制相似问题