"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?
Я не получил ваш вопрос во второй строке, вы сравниваете A с a, и он дает u 1, это означает, что A больше, чем a, что вы имеете в виду под своим вопросом? Sora 28.06.2013
Может быть, это из-за локали. (Хотя я не могу говорить на C # ...) johnchen902 28.06.2013
Внутри я использую вызов функции Windows API InternalCompareString, но не смог найти по нему документацию. Tigran 28.06.2013
Мой вопрос в том, почему .Net определяет, какой A больше, чем a, а не возвращаемое значение 1. В .Net String.CompareTo возвращает 1 (больше нуля) означает, что этот экземпляр больше, чем strB. Если я использую Char.CompareTo: 'A'.CompareTo (' a '); возвращаемое значение - 32, это хорошо, но String.CompareTo возвращает 1, поэтому я хочу знать, почему и как. smartleos 28.06.2013
Как я говорю ниже, это, вероятно, зависит от вашей культуры. Однако не знаю, что под этим подразумевает .NET ... fge 28.06.2013
Этот метод выполняет сравнение слов (с учетом регистра и языка и региональных параметров) с использованием текущего языка и региональных параметров.
Итак, это не совсем то же самое, что Java .compareTo(), который по умолчанию выполняет лексикографическое сравнение, используя, как вы говорите, кодовые точки Unicode.
Следовательно, в .NET это зависит от вашей текущей "культуры" (я полагаю, что в Java это называется "локалью").
Похоже, что если вы хотите выполнить сравнение строк "а-ля Java" в .NET, вы должны использовать _ 2_.
Напротив, если вы хотите выполнить сравнение строк в Java, зависящее от локали, вам необходимо использовать _ 3_.
Наконец, другая ссылка в MSDN показывает влияние культур на сравнения. и даже равенство строк.
Возвращает: значение 0, если строка аргумента равна этой строке; значение меньше 0, если эта строка лексикографически меньше, чем строковый аргумент; и значение больше 0, если эта строка лексикографически больше, чем строковый аргумент.
Этот метод выполняет сравнение слов (с учетом регистра и языка и региональных параметров) с использованием текущего языка и региональных параметров. Для получения дополнительной информации о сортировке по слову, строке и порядковому номеру см. 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 как
Ответ 3 · рейтинг -1 · Manish Doshi
Это связано с порядком символов в наборе символов ASCII. это то, что вам действительно следует понять, если вы собираетесь производить какие-либо манипуляции с данными в своих программах.
Я не уверен, есть ли у элемента управления сеткой какие-либо свойства, позволяющие изменять порядок сортировки, в противном случае вам придется написать свою собственную подпрограмму сортировки.
Вы можете использовать функцию std :: sort с определяемой пользователем функцией предиката, которая ставит все нижний регистр перед верхним регистром.