为什么在.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方法(字符串)
我能找到的医生说:
此方法使用当前区域性执行单词(区分大小写和区域性)比较。
因此,它与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函数与用户定义的谓词函数一起使用,该谓词函数将所有小写置于大写之前。