Как сравнить символы (уважающий культуру)

Для моего ответа в этом вопросе я должен сравнить два символа. Я думал что нормальный символ. CompareTo () метод позволил бы мне указывать CultureInfo, но это не имеет место.

Таким образом, мой вопрос: Как я могу сравнить два символа и указать CultureInfo для сравнения?

6
задан Community 23 May 2017 в 12:19
поделиться

4 ответа

Действительно существует разница между сравнением символов и строк. Позвольте мне попытаться объяснить основную проблему, которая довольно проста: символ всегда представляет собой одну точку Unicode. При сравнении символов всегда сравниваются кодовые точки без учета их равного значения.

Если вы хотите сравнить символы на предмет равного значения, вам нужно создать строку и использовать предоставленные там методы сравнения. Сюда входит поддержка разных культур. См. Ответ Гуффа о том, как это сделать.

4
ответ дан 9 December 2019 в 22:30
поделиться

Для символов нет сравнения с поддержкой языка и региональных параметров, необходимо преобразовать символы в строки, чтобы можно было использовать, например, String.Compare (string, string, CultureInfo, CompareOptions) метод.

Пример:

char a = 'å';
char b = 'ä';

// outputs -1:
Console.WriteLine(String.Compare(
  a.ToString(),
  b.ToString(),
  CultureInfo.GetCultureInfo("sv-SE"),
  CompareOptions.IgnoreCase
));

// outputs 1:
Console.WriteLine(String.Compare(
  a.ToString(),
  b.ToString(),
  CultureInfo.GetCultureInfo("en-GB"),
  CompareOptions.IgnoreCase
));
4
ответ дан 9 December 2019 в 22:30
поделиться

Я не думаю, что cultureInfo имеет значение при сравнении символов в C #. char уже является символом Unicode, поэтому два символа можно легко сравнить с помощью CultureInfo.

1
ответ дан 9 December 2019 в 22:30
поделиться

Вы пробовали String.Compare Method?

При сравнении используется текущий язык и региональные параметры, чтобы получить информацию, относящуюся к региональным параметрам, например правила регистра и алфавитный порядок отдельных символов . Например, культура может указывать, что определенные комбинации символов обрабатываются как один символ, или символы верхнего и нижнего регистра сравниваются определенным образом, или что порядок сортировки символа зависит от символов, которые предшествуют или следуют за ним.

String.Compare(str1, str2, false, new CultureInfo("en-US"))
2
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: