标点符号与字母的顺序
在C#中,众所周知".".CompareTo("A") == -1
。
我的问题是:是否有一个标点符号x使得x.CompareTo("A") == 1
(奇怪的是我无法在任何地方找到答案)
或者换句话说,C#中字符串的完整默认顺序是什么?
我知道我可以定义比较器和比较,但我问这个问题,因为我使用的是一个我无法修改的类,它在字符串列表上执行默认的字母排序。
我的问题是我需要在列表的末尾添加一些虚拟值,我宁愿有类似的东西:
"value 1" "value 2" "_" "_" "_"
比
"value 1" "value 2" "zzz" "zzz" "zzz"
编辑:
这不是很好,但我会使用(char)738
你应该只使用你喜欢的代码字符(即字符'\uffcc'
或字符串"\uffcc"
)作为哨兵,只要你不需要使它可打印。
字符比较使用Unicode(UTF-16)字符代码。 所以看看Unicode表找一些像:
‘A’<'{'或'A'<''。
字符串比较:String类中没有“<”和“>”运算符。 您需要使用Compare方法。 通常,您使用StringComparer类来选择您希望区分大小写,区分文化或仅使用Unicode值的比较类型。
Unicode类型的字符会影响CompareTo使用的默认比较(不使用比较序号时)。 具有“OtherLetter”类别的字符大于具有“OtherSymbol”或“OtherPunctuation”类别( Char.GetUnicodeCategory )的字符 。 有关详细信息,请参阅CompareOptions .StringSort。
C#中的字符是UTF-16(16位字符)。
以下ASCII(即在标准美国键盘上找到)非字母字符出现在A:
[\] ^ _`
以下是A之后以及之后的小写a:
〜{| }
ASCII范围之上还有许多其他特殊字符
看到
http://www.fileformat.info/info/charset/UTF-16/list.htm
字符的排序顺序仅基于其ASCII值。
示例ASCII表
所以,是的,有很多字符比A更“高”。