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

本文关键字:大于 小写字 大写字母 Net 为什么 | 更新日期: 2023-09-27 18:20:09

在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方法(字符串)

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

我能找到的医生说:

此方法使用当前区域性执行单词(区分大小写和区域性)比较。

因此,它与Java的.compareTo()不太一样,后者默认情况下使用Unicode代码点进行字典比较。

因此,在.NET中,它取决于您当前的"文化"(我想Java会称之为"区域设置")。

似乎,如果您想在.NET中进行字符串比较"àla Java",则必须使用String.CompareOrdinal()

相反,如果您想在Java中进行与区域设置相关的字符串比较,则需要使用Collator

最后,MSDN上的另一个链接显示了文化对比较甚至字符串相等性的影响。

来自Java字符串

退货:如果参数字符串等于此字符串,则值为0;如果该字符串在字典上小于字符串参数,则该值小于0;如果该字符串在字典上大于字符串参数,则为大于0的值。

从.Net String.Compare到

此方法执行单词(区分大小写和区域性)使用当前文化进行比较。有关单词的更多信息,字符串和顺序排序,请参见System.Globalization.CompareOptions.

这篇文章解释了比较类型之间的区别

文档解释了所有比较类型之间的差异;

如果你看看这两个,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的

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

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

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