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

本文关键字:顺序 字符 比较 单个 字符串 | 更新日期: 2023-09-27 18:00:06

我有一个关于字符串比较与字符比较的问题。

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

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

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

当我比较下面代码中的两个一个字符串时,我得到值-1,这表示">"小于"0"(默认区域性为英语)

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

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

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

此外,string.Compare(string str1, string str2)文档中写道:

比较使用当前文化来获得特定文化大小写规则和的字母顺序等信息单个字符

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

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

当您比较字符'>''0'时,您正在比较它们的序数值。

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

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

默认情况下使用当前区域性,该区域性的排序顺序旨在"按字母顺序"对字符串进行排序,而不是严格按照词汇顺序进行排序。

字符串的排序顺序取决于您使用的区域性。

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

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 { | } ~

听起来你想要的是不使用区域性特定规则的比较。你试过StringComparison吗?序号:

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

它返回-1,因为它正在比较str2str1,而不是相反。例如,"48等于62"。不,它小于62,所以它返回-1。当您读取参数顺序

时,它在语义上有点令人困惑