在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中的小写字母?
答案 0 :(得分:3)
此方法使用当前文化执行单词(区分大小写和文化敏感)比较。
因此,它与Java's .compareTo()
不完全相同,默认使用Unicode代码点进行字典比较,如你所说。
因此,在.NET中,它取决于您当前的“文化”(我猜Java会称之为“语言环境”)。
似乎如果你想在.NET中进行字符串比较“àlaJava”,你必须使用String.CompareOrdinal()
代替。
相反,如果要在Java中进行与语言环境相关的字符串比较,则需要使用Collator
。
最后,MSDN上的another link显示了文化对比较甚至字符串相等的影响。
答案 1 :(得分:2)
返回: 如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则小于0的值;如果此字符串按字典顺序大于字符串参数,则值大于0.
此方法执行一个单词(区分大小写且对文化敏感) 使用当前文化进行比较。有关单词的更多信息, 字符串和序数排序,请参阅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函数与用户定义的谓词函数一起使用,该函数将所有小写放在大写之前。