字符串比较和单个字符的字母顺序

Ale*_*dar 17 c# string string-comparison

我有一个与字符串比较和字符比较相关的问题.

字符>0(零)具有以下十进制值6248相应地.

当我比较以下代码中的两个字符时,我得到了值True(这是正确的)

Console.WriteLine('>' > '0');
Run Code Online (Sandbox Code Playgroud)

当我在下面的代码中比较两个单字符字符串时,我得到的值-1表示">"小于"0"(默认文化是英语)

Console.WriteLine(string.Compare(">", "0"));
Run Code Online (Sandbox Code Playgroud)

而以下代码中的"3"和"1"(5149代码值)的比较返回1(如预期的那样)

Console.WriteLine(string.Compare("3", "1"));
Run Code Online (Sandbox Code Playgroud)

另外,string.Compare(string str1, string str2)文档说:

比较使用当前文化来获取特定于文化的信息,例如套管规则和单个字符的字母顺序

您是否能够解释(或提供一些文档的参考)如何实现字符串比较,例如如何计算单个字符的字母顺序等?

dtb*_*dtb 22

字符串的排序顺序取决于您使用的文化.

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
Run Code Online (Sandbox Code Playgroud)

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 { | } ~
Run Code Online (Sandbox Code Playgroud)

  • 你没有告诉我们你现在的文化是什么,这是一种耻辱.我可以说它不是"fy-NL"(西弗里西亚(荷兰)),因为那时字母"y"将在"i"旁边.此外,它不能是"et-EE"(爱沙尼亚语(爱沙尼亚语)),因为`z`将在`s`旁边. (6认同)

Pet*_*ham 17

当你比较字符'>''0',你是比较它们的序数值.

要从字符串比较中获得相同的行为,请提供序数字符串比较类型:

  Console.WriteLine(string.Compare(">", "0", StringComparison.Ordinal));
  Console.WriteLine(string.Compare(">", "0", StringComparison.InvariantCulture));
  Console.WriteLine(string.Compare(">", "0", StringComparison.CurrentCulture));
Run Code Online (Sandbox Code Playgroud)

默认情况下使用当前文化,其具有排序顺序,用于按字母顺序对字符串进行排序,而不是按严格的词汇顺序排序,以按字母顺序定义.