2012-02-28 51 views
1

在C#中,衆所周知的是。標點符號與字母的順序

我的問題是:有沒有一個標點符號x滿足x.CompareTo("A") == 1(奇怪的是,我找不到任何地方的答案)

或在其他方面,究竟是什麼在C#中的字符串完整的默認順序?

我知道我可以定義比較器和比較,但我問這個問題,因爲我使用了一個我無法修改的類,它對字符串列表執行默認的字母排序。

我的問題是,我需要把一些虛擬值在列表的末尾,我寧願有這樣的事情:

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

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

編輯:

這不是很好,但我會用(char)738

+1

它不「馳名」即'「高」「」 <「A」'。該代碼不能編譯。你的意思是''。' <'A''? – svick 2012-02-28 02:47:27

+0

這是功課嗎? – shanabus 2012-02-28 02:47:35

+0

不,這不是功課。 – 2012-02-28 02:57:39

回答

2

您應該簡單地使用字符的代碼你像(即字符'\uffcc'或字符串"\uffcc")作爲標記,只要您不需要使其可打印即可。

字符比較使用Unicode(UTF-16)字符代碼。所以看看Unicode表,找到一些像:

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

字符串比較:String類中沒有「<」和「>」運算符。您需要使用Compare方法。通常,您使用StringComparer類來選擇您希望區分大小寫,文化意識或僅使用Unicode值的比較類型。

Unicode字符類型影響CompareTo使用的默認比較(當不使用比較序號時)。類別爲「OtherLetter」的字符大於「OtherSymbol」或「OtherPutctuation」類別的字符(Char.GetUnicodeCategory)。有關詳細信息,請參見CompareOptions .StringSort。

+0

這也行不通。我想我只會輸出所有的字符,並檢查它們是否比A ...更大 – 2012-02-28 03:04:09

+0

有趣的「\ uFFCC」.CompareTo(「A」)== 1'但類似'「\ uFFFC」'是 - 1。 – 2012-02-28 03:12:39

+0

這是非常奇怪的是,所有遠程看起來像一個標點符號顯示爲比任何字符小... – 2012-02-28 03:17:23

2

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

以下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

+0

是的,我試過了,但似乎C#沒有使用utf8。我將嘗試Unicode – 2012-02-28 02:36:08

+0

C#使用utf-16。你可以使用一個編碼器將字符串轉換爲UTF-8 http://msdn.microsoft.com/en-us/library/system.text.utf8encoding(v=vs.100).aspx – 2012-02-28 02:49:19

+0

我試過「〜」和它不起作用。我不認爲CompareTo函數是基於utf 16代碼的。 – 2012-02-28 02:53:52

0

字符的排序順序只是基於它們的ASCII值。

Example ASCII table

所以,是的,有很多字是比A.

+1

其實根據Unicode值。 ASCII是Unicode的一個子集。 – 2012-02-28 02:32:31