2013-02-19 108 views
16

我有一個與字符串比較和字符比較相關的問題。字符串比較和單個字符的字母順序

字符>0(零)相應地具有以下十進制值6248

當我在下面的代碼比較兩個字符,我得到的值True(這是正確的)

Console.WriteLine('>' > '0'); 

當我在下面的代碼比較兩個單字符的字符串,我得到的值-1這表明「>」 小於 「0」(默認培養是英語)

Console.WriteLine(string.Compare(">", "0")); 

而 「3」 和 「1」(5149代碼VALU的比較ES)在下面的代碼返回1(如預期)

Console.WriteLine(string.Compare("3", "1")); 

此外,string.Compare(string str1, string str2)文檔說:

比較使用當前培養以得到區域性特定 信息,諸如套管規則和的 單個字符的字母順序

你能解釋(或提供參考了一些文檔)如何小號例如,實施比較。 個人字符的字母順序是如何計算的?

回答

14

當您比較字符'>''0'時,您正在比較它們的序數值。

從字符串比較獲得相同的行爲,供應有序字符串比較類型:

Console.WriteLine(string.Compare(">", "0", StringComparison.Ordinal)); 
    Console.WriteLine(string.Compare(">", "0", StringComparison.InvariantCulture)); 
    Console.WriteLine(string.Compare(">", "0", StringComparison.CurrentCulture)); 

當前的文化所使用的默認設置,其目的排序爲字符串「字母」,而在排序嚴格詞彙順序,按字母順序一些定義。

0

它返回-1,因爲它正在比較str2str1,而不是反過來。例如,「48等於62」。不,它小於62,所以它返回-1。當您讀取參數順序時,語義上有點令人困惑

+0

[MSDN](http://msdn.microsoft.com/en-us/library/84787k22.aspx)顯示「String.Compare(STRA,STRB) - 小於零 - STRA是少比strB。「例如,'string.Compare(「A」,「B」)'返回'-1' - '「A」'小於'「B」'。爲什麼'「>」'小於'「0」'? – dtb 2013-02-19 21:15:23

+0

我已經更新了我的問題:當您比較「3」到「1」時,您得到值「1」,其中「3」代碼爲51,「1」代碼爲49(如預期的那樣)。所以這與你的解釋不符。 – Alexandar 2013-02-19 21:18:59

+0

@Alexandar好點。我認爲PeteKirkham回答比我更好 – DiskJunky 2013-02-19 21:26:18

17

字符串的排序順序取決於您使用的文化。

StringComparer.CurrentCulture排序以下1個字符的字符串作爲我的機器上進行以下

' - ! " # $ % & () * , ./: ; ? @ [ 
\ ]^_ ` { | } ~ + <=> 0 1 2 3 4 5 6 
7 8 9 a A b B c C d D e E f F g G h H i 
I j J k K l L m M n N o O p P q Q r R s 
S t T u U v V w W x X y Y z Z 

StringComparer.Ordinal種類相同的字符串如下:

! " # $ % & ' () * + , - ./0 1 2 3 
4 5 6 7 8 9 : ; <=> ? @ A B C D E F G 
H I J K L M N O P Q R S T U V W X Y Z [ 
\ ]^_ ` a b c d e f g h i j k l m n o 
p q r s t u v w x y z { | } ~ 
+5

你沒有告訴我們你目前的文化是什麼,這是一個恥辱。我可以說它不是''fy-NL''(西弗裏西亞語(荷蘭)),因爲那樣'y'就會在'i'旁邊。此外,它不能是「et-EE」(愛沙尼亞語(愛沙尼亞)),因爲那麼'z'會在's'旁邊。 – 2013-10-02 08:46:29

+0

用戶dtb根據SO配置文件位於德國。 – 2018-02-11 14:23:30

2

這聽起來像你想要什麼比較不使用特定於文化的規則。你有沒有嘗試過StringComparison。序:

Console.WriteLine(string.Compare(">", "0", StringComparison.Ordinal)); // returns a positive number 
相關問題