标点符号与字母的顺序

时间:2012-02-28 02:25:06

标签: c# string

在C#中,众所周知".".CompareTo("A") == -1

我的问题是:是否有一个标点符号x,x.CompareTo("A") == 1(奇怪的是我无法在任何地方找到答案)

或换句话说,C#中字符串的完整默认顺序是什么?

我知道我可以定义比较器和比较,但是我问这个问题,因为我使用的是一个我无法修改的类,并且在字符串列表上执行默认的字母排序。

我的问题是我需要在列表末尾添加一些虚拟值,我宁愿有类似的东西:

"value 1"
"value 2"
"_"
"_"
"_"

大于

"value 1"
"value 2"
"zzz"
"zzz"
"zzz"

编辑:

这不是很好,但我会使用(char)738

3 个答案:

答案 0 :(得分:2)

C#中的字符是UTF-16(16位字符)。

以下ASCII(即在标准美国键盘上找到)非字母字符出现在A:

之后

[\] ^ _`

以下是A之后以及之后的小写a:

〜{| }

ASCII范围之上还有许多其他特殊字符

http://www.fileformat.info/info/charset/UTF-16/list.htm

http://en.wikipedia.org/wiki/UTF-16

http://msdn.microsoft.com/en-us/library/dd374081.aspx

答案 1 :(得分:2)

只要您不需要使用可打印的字符,就应该将字符与您喜欢的代码(即字符'\uffcc'或字符串"\uffcc")一起用作哨兵。

字符比较使用Unicode(UTF-16)字符代码。所以看看Unicode表来找一些像:

'A'< '{'或'A'< '¡'。

字符串比较:没有“<”和“>” String类中的运算符。您需要使用Compare方法。通常,您使用StringComparer类来选择您希望区分大小写,区分文化或仅使用Unicode值的比较类型。

Unicode类型的字符会影响CompareTo使用的默认比较(不使用比较序号时)。具有“OtherLetter”类别的字符大于具有“OtherSymbol”或“OtherPunctuation”类别(Char.GetUnicodeCategory)的字符。有关详细信息,请参阅CompareOptions。StringSort。

答案 2 :(得分:0)

字符的排序顺序仅基于它们的ASCII值。

Example ASCII table

所以是的,有很多字符比A更“高”。