首页 文章

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

提问于
浏览
16

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

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

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

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

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

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

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

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

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

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

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

4 回答

  • 2

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

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

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

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

  • 15

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

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

    听起来你想要的是不使用文化特定规则的比较 . 你试过StringComparison.Ordinal:

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

    它返回 -1 ,因为它将 str2str1 进行比较,而不是相反 . 例如,"is 48 equal to 62" . 不,在阅读参数顺序时,它在语义上有点混乱

相关问题