2013-07-25 7 views
0

Я нахожусь в моих первых шести месяцах программирования на работе, и я все еще испытываю чувство стандартов и лучших практик.Является ли это более распространенным/стандартным, чтобы сравнить прописные или строчные буквы?

При сравнении строк или символов чаще всего используется ToUpper для сравнения символов верхнего регистра или ToLower для нижнего регистра? Я, вероятно, чаще просматривал прописные буквы, но я искал более окончательный ответ и, возможно, долгое объяснение оптимизации (более низкий код ASCII, независимо от того).

Помимо этого: В моей текущей задаче я использую замену строки #, и моя новая строка будет вестись в нижнем регистре для удобства чтения, но это обязательно означает, что я должен использовать ToLower как для моей исходной строки, так и для подстроки, Вы ищете?

ответ

4

Если есть способ сделать сравнение без учета регистра, не изменяя случай, вы должны использовать его вместо. Если нет, то в большинстве ситуаций лучше преобразовать в верхний регистр. Например, немецкий sharp-s ß преобразуется в двойную S в верхнем регистре и правильно сравнивается с SS. Если вы перешли к нижнему регистру, это провалится, поскольку SS в нижнем регистре - ss, а не ß.

1

Это, вероятно, что-то конкретное для вашей конкретной команды разработчиков. Это должно быть эффективно эквивалентно в любом случае, поскольку все нижние> верхние преобразования должны содержать обратный верхний -> нижний.

Однако, вероятно, это хорошая идея, чтобы быть последовательной в рамках проекта на всякий случай, если вы получите расширенный символ с нечеткой оболочкой, где нет взаимных отношений.

+0

Есть ли ситуация, когда _not_ быть последовательным может вызвать проблему с расширенными символами? – FLGMwt

+0

Как отмечает @Joni, ß не имеет обратного верхнего -> нижнего, нижнего - верхнего. Если вы сделаете сравнение между собой и сравнением в сравнении с одним и тем же проектом, вы можете получить непоследовательные результаты. – MightyE

2

Зависит от языка программирования вы используете, C# имеет случай insesitive сравнить встроенные:

string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase); 
+1

Я действительно использую C#, но меня интересовало агностическое предпочтение, когда вы вынуждены использовать абсолютный корпус, если он существует. – FLGMwt