当前位置:  开发笔记 > 编程语言 > 正文

检测字符串是否全部是CAPS

如何解决《检测字符串是否全部是CAPS》经验,为你挑选了6个好方法。

在C#中有一种方法可以检测字符串是否全部为大写字母?

大多数字符串都很短(即不超过100个字符)



1> Greg Dean..:

无需创建新字符串:

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;
    }


或者如果(input.All(Char.IsUpper){}
我不明白为什么只有10条线可以声明一个简单的正则表达式匹配项... Googled叔叔告诉我*新* Regex(@“ [AZ] +”)。IsMatch(输入)`应该工作...或...检查[az],并且应该没有匹配项(如果允许输入非字母字符)\ _()_ /

2> Jon Skeet..:

我喜欢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);


“ XyZ” .All(Char.IsUpper)

3> BoltBait..:

简单?

if (input.ToUpper() == input)
{
    // string is all upper
}


这会为"ABC1"或"*!()@"等字符串计算"true".我不知道原始的海报上下文,但对于包含非大写字母的字符串,此解决方案肯定会返回'true'.
更少的代码是更好的代码.一种方法是不必要地将其转换为上层,另一种方法是将不必要的简单==转换为九行循环函数.如果分析显示它有用,则进行优化.
我会选择ToUpperInvariant()

4> Ifeanyi Eche..:

确保您的大写定义匹配.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算法.

当然,如果您的代码永远不会在英语区域之外运行或从不接收非英语文本,那么这一切都不重要.



5> M4N..:

使用

if (input == input.ToUpper())



6> Nick..:

我会将字符串转换为所有大写字母(with ToUpper)然后将其与原始字符串(使用)进行比较Equals.应该可以在一行代码中使用.

return s.Equals(s.ToUpper())

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有