为什么大写字母大于.Net中的小写字母?

时间:2013-06-28 06:21:33

标签: c# java compare

在Java中:

"A".compareTo("a"); return -32 //"A" is less than "a".

在.Net中,使用String.CompareTo:

"A".CompareTo("a"); return 1 //"A" is greater than "a".

在.Net中,使用Char.CompareTo:

'A'.CompareTo('a'); return -32 //"A" is less than "a".

我知道Java使用它在unicode表中的位置比较字符串字符,但.Net不是。如何确定哪个大写字母大于.Net中的小写字母?

String.CompareTo Method (String)

3 个答案:

答案 0 :(得分:3)

doc I could find说:

  

此方法使用当前文化执行单词(区分大小写和文化敏感)比较。

因此,它与Java's .compareTo()不完全相同,默认使用Unicode代码点进行字典比较,如你所说。

因此,在.NET中,它取决于您当前的“文化”(我猜Java会称之为“语言环境”)。

似乎如果你想在.NET中进行字符串比较“àlaJava”,你必须使用String.CompareOrdinal()代替。

相反,如果要在Java中进行与语言环境相关的字符串比较,则需要使用Collator

最后,MSDN上的another link显示了文化对比较甚至字符串相等的影响。

答案 1 :(得分:2)

来自Java String

  

返回:   如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则小于0的值;如果此字符串按字典顺序大于字符串参数,则值大于0.

来自.Net String.CompareTo

  

此方法执行一个单词(区分大小写且对文化敏感)   使用当前文化进行比较。有关单词的更多信息,   字符串和序数排序,请参阅System.Globalization.CompareOptions

这篇文章解释了difference between the comparison types

所有比较类型之间的doc explains the difference;

如果你看看这两个,CurrentCulture和Ordinal

 StringComparison.Ordinal: 
 LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131) 
 LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049) 
 LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U

 StringComparison.CurrentCulture: 
 LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131) 
 LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049) 
 LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049) 

Ordinal是唯一一个"i" > "I",因此像Java一样的

答案 2 :(得分:-1)

这是由于ASCII字符集中字符的顺序。如果您要在程序中进行任何形式的数据操作,这是您应该真正理解的。

我不确定网格控件是否具有允许您修改排序顺序的任何属性,否则您将不得不编写自己的排序子例程。

您可以将std :: sort函数与用户定义的谓词函数一起使用,该函数将所有小写放在大写之前。