Как сравнить две строки и их заглавные и строчные буквы

Допустим, у меня есть 2 строки. Первая строка - x = "abc", а вторая - y = "ABC". Когда я пишу на c # следующий код:

if(x == y)

или

if(x.Equals(y))

возвращаемое значение равно true. Как я могу проверить их верхний и нижний регистр?

16 голосов | спросил daidai 22 PM00000020000001231 2013, 14:53:12

5 ответов


0

Возвращаемое значение не true, а false, так как .NET по умолчанию чувствителен к регистру.

От String.Equals :

  

Этот метод выполняет порядковый номер ( с учетом регистра и   нечувствительное к культуре) сравнение.

Для == то же самое верно, поскольку String.Equality оператор вызывает Equals:

  

Этот оператор реализован с использованием метода Equals , что означает   сравнительные тесты проверяются на сочетание эталона и значения   равенство. Этот оператор выполняет порядковое сравнение.

Это будет сравнивать без учета регистра:

bool equals = x.Equals(y , StringComparison.OrdinalIgnoreCase);

Если вы просто хотите узнать, является ли символ прописными или строчными, вы можете использовать эти методы:

bool isUpperChar = Char.IsUpper("ABC"[0]); // yes
bool isLowerChar = Char.IsLower("ABC"[0]); // no
ответил Rango 22 PM00000020000002531 2013, 14:55:25
0

Сначала вы должны решить, будете ли вы сравнивать строки culture dependent или независимый (например, в русской культуре буквы «Е» и «Ё» часто трактуются как одинаковые; финский склонен считать «V» и «W» одинаковыми и т. д.). Затем вы должны выбрать, использовать ли или нет case ("a" v. "A"). Итак, есть 6 возможных сравнений:

Порядковые (независимые от культуры) сравнения:

// Ignore case comparison
Boolean equals = String.Equals(x, y, StringComparison.OrdinalIgnoreCase);
// Case comparison
Boolean equals = String.Equals(x, y, StringComparison.Ordinal);

Текущие сравнения культур:

// Current culture, ignore case comparison
Boolean equals = String.Equals(x, y, StringComparison.CurrentCulture);
// Current culture, case comparison
Boolean equals = String.Equals(x, y, StringComparison.CurrentCultureIgnoreCase);

Явные сравнения культур:

CultureInfo culture = new CultureInfo("Ru-ru"); // <- Or whatever you want

// Explicit culture, ignore case comparison
Boolean equals = culture.CompareInfo.Compare(x, y, CompareOptions.IgnoreCase);
// Explicit culture, case comparison
Boolean equals = culture.CompareInfo.Compare(x, y, CompareOptions.None);
ответил Dmitry Bychenko 22 PM00000030000003231 2013, 15:04:32
0

Как писал Pleun, или вы можете

StringComparer.CurrentCultureIgnoreCase.Equals(a, b)

Обратите внимание, что мы используем метод упорядочивания CurrentCulture. Иногда вам придется использовать разные методы упорядочения (каждый язык упорядочивает буквы по-своему)

Если вы уверены, что заказываете только символы ASCII, тогда

StringComparer.OrdinalIgnoreCase.Equals(a, b)

немного быстрее (или в общем случае вы можете выбрать OrdinalIgnoreCase)

В общем случае конвертируем ToUpper() или ToLower() две строки для их сравнения являются неправильными (и медленными, потому что вам необходимо полностью преобразовать их перед сравнением, хотя, возможно, они различаются по первому символу) ... Неправильно, потому что в турецком языке их четыре i

http: //codeblog.jonskeet .uk /2009/11 /02 /OMG-пони-ака-человечество-эпического обанкротиться /

ответил xanatos 22 PM00000020000001231 2013, 14:57:12
0

Try:

Чувствительно к регистру:

String.Equals (a,b)

Без учета регистра

string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
ответил Pleun 22 PM00000020000002931 2013, 14:54:29
0

Это еще один вариант, который вы можете попробовать.

if(string.Compare("a", "A", true) == 0)
ответил Krishna Sarma 22 PM00000030000001231 2013, 15:08:12

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132