在C#中有一种方法可以检测字符串是否全部为大写字母?
大多数字符串都很短(即不超过100个字符)
无需创建新字符串:
bool IsAllUpper(string input) { for (int i = 0; i < input.Length; i++) { if (!Char.IsUpper(input[i])) return false; } return true; }
编辑:如果你想跳过非字母字符(OP的原始实现没有,但他/她的评论表明他们可能想要):
bool IsAllUpper(string input) { for (int i = 0; i < input.Length; i++) { if (Char.IsLetter(input[i]) && !Char.IsUpper(input[i])) return false; } return true; }
我喜欢LINQ方法.
如果要将其限制为所有大写字母(即没有空格等):
return input.All(c => char.IsUpper(c));
或使用方法组转换:
return input.All(char.IsUpper);
如果你想禁止小写字母:
return !input.Any(c => char.IsLower(c));
要么
return !input.Any(char.IsLower);
简单?
if (input.ToUpper() == input) { // string is all upper }
确保您的大写定义匹配.Nets定义大写.
.Net中的ToUpper()是一种语言操作.在某些语言中,大写规则并不是直截了当的.土耳其语我因此而闻名.
// Meaning of ToUpper is linguistic and depends on what locale this executes // This test could pass or fail in ways that surprise you. if (input.ToUpper() == input) { // string is all upper }
你可以用
// Meaning of ToUpper is basically 'ASCII' ToUpper no matter the locale. if (input.ToUpper(CultureInfo.InvariantCulture) == input) { // string is all upper }
你可能想要通过字符大写来节省内存
MSDN警告不要这样做
for(int i = 0; i < input.Length; i++) { if(input[i] != Char.ToUpper(input[i], CultureInfo.InvariantCulture)) { return false; } }
上面的代码介绍了一个bug.一些非英语'字母'需要两个.net字符来编码(代理对).您必须检测这些对并将它们作为一个单元进行大写.
此外,如果您省略了文化信息以获得语言大写,那么您将引入一个错误,在某些区域设置中,您的家庭酿造大写算法不同意该区域设置的.net算法.
当然,如果您的代码永远不会在英语区域之外运行或从不接收非英语文本,那么这一切都不重要.
使用
if (input == input.ToUpper())
我会将字符串转换为所有大写字母(with ToUpper
)然后将其与原始字符串(使用)进行比较Equals
.应该可以在一行代码中使用.
return s.Equals(s.ToUpper())