Ответ 1
Вы можете использовать LINQ:
fullUri.Any(c => char.IsUpper(c));
Есть ли альтернатива использованию регулярного выражения, чтобы определить, содержит ли строка символы верхнего регистра? В настоящее время я использую следующее регулярное выражение:
Regex.IsMatch(fullUri, "[A-Z]")
Это прекрасно работает, но я часто слышу старую пословицу "Если вы используете регулярные выражения, у вас есть две проблемы".
Вы можете использовать LINQ:
fullUri.Any(c => char.IsUpper(c));
RegEx, похоже, переборщик:
bool containsAtLeastOneUppercase = fullUri.Any(char.IsUpper);
Используйте Linq!
fullUri.Any(c=> char.IsUpper(c));
Возможно, вы также можете сделать (если вы хотите что-то, что будет работать в .NET 1.0:):
bool hasUpperCase = !fullUri.ToLower().Equals(fullUri);
Хотя регулярное выражение это просто, вероятно, отлично работает
Ваше регулярное выражение будет находить только буквы ASCII заглавной буквы. Удобно, что механизм регулярных выражений .NET поддерживает Unicode, что позволяет вам делать
Regex.IsMatch(fullUri, @"\p{Lu}")
хотя я полагаю, что в вашем случае вы не ожидаете буквы, отличные от ASCII, в вашей строке (учитывая его название).
используя для циклов, не так эффективны и читаемы, как указывали другие методы, но для начинающих должны работать и обеспечивать комплексный способ сделать это:
int counter = 0;
for(int i=0; i< myString.Length;i++)
{
//if character is upper add +1 to counter
if(char.IsUpper(chaineNonPascale[i]))
{
counter++;
}
}
В основном, вы перебираете строку и проверяете верхние символы, тогда вы можете добавить логику относительно того, что делать с местом, где находится верхний Char. Например, вставьте пробел, где найден второй верхний регистр char, а затем используйте метод ToLower для всей строки...