我有一个与字符串比较和字符比较有关的问题。
字符>
和0
(零)会相应地跟随小数值62
和48
。
当我比较以下代码中的两个字符时,我得到值True
(这是正确的)
Console.WriteLine('>' > '0');
当我在以下代码中比较两个单字符字符串时,我得到值-1
,表示“>”小于“0”(默认文化是英文)
Console.WriteLine(string.Compare(">", "0"));
以下代码中“3”和“1”(51
和49
代码值)的比较返回1
(正如预期的那样)
Console.WriteLine(string.Compare("3", "1"));
此外,string.Compare(string str1, string str2)
文档说:
比较使用当前的文化来获得特定文化 套管规则和字母顺序等信息 个人角色
您是否能够解释(或提供对某些文档的参考)如何实现字符串比较,例如如何计算个别字符的字母顺序等?
答案 0 :(得分:20)
字符串的排序顺序取决于您使用的文化。
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 { | } ~
答案 1 :(得分:15)
比较字符'>'
和'0'
时,您正在比较它们的序数值。
要从字符串比较中获得相同的行为,请提供序数字符串比较类型:
Console.WriteLine(string.Compare(">", "0", StringComparison.Ordinal));
Console.WriteLine(string.Compare(">", "0", StringComparison.InvariantCulture));
Console.WriteLine(string.Compare(">", "0", StringComparison.CurrentCulture));
默认情况下使用当前文化,它有一个排序顺序,用于按字母顺序排序字符串,而不是严格的词汇顺序,用于按字母顺序排列。
答案 2 :(得分:2)
听起来你想要的是不使用文化特定规则的比较。你试过StringComparison.Ordinal:
Console.WriteLine( string.Compare( ">", "0", StringComparison.Ordinal ) ); // returns a positive number
答案 3 :(得分:0)
它返回-1
,因为它将str2
与str1
进行比较,而不是相反。例如,“48等于62”。不,它小于62,所以它返回-1。当您阅读参数顺序