检测一个string是否全是CAPS

在C#中有一种方法来检测一个string是否全部大写?

大部分的string都会很短(即不超过100个字符)

不需要创build一个新的string:

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 } 

确保你的大写的定义匹配。定义大小写。

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

上面的代码引入了一个错误。 一些非英文“字母”需要两个.net字符进行编码(代理对)。 你必须检测这些对,并把它们作为一个单位来利用。

此外,如果您忽略文化信息以获取语言大写,则会引入一个错误,在某些语言环境中,您的家庭大写字母algorithm会与该语言环境的.netalgorithm不一致。

当然,如果你的代码永远不会在英文区域之外运行,或者永远不会收到非英文文本,那么这些都不重要。

我将string转换为全部大写(与ToUpper ),然后将其与原始(使用Equals )进行比较。 应该在一行代码中可行。

return s.Equals(s.ToUpper())

使用

 if (input == input.ToUpper()) 

如果这需要良好的性能,我假设它发生了很多。 如果是这样,请采取您的解决scheme,并做了几百万次和时间。 我怀疑你有什么比其他解决scheme更好,因为你没有创build一个新的垃圾收集对象,必须清理,而且你不能创build一个string的副本,而无需反复。

我认为以下几点:

 bool equals = (String.Compare(input, input.ToUpper(), StringComparison.Ordinal) == 0) 

也可以工作,并且可以确保比较是在不考虑string大小写(我认为VB.NET默认情况下忽略大小写)的情况下进行的。 O甚至使用String.CompareOrdinal(input, input.ToUpper())

正则expression式浮现在脑海中。 在那里find了这个: http : //en.csharp-online.net/Check_if_all_upper_case_string

另一种方法

 return input.Equals(input.ToUpper(), StringComparison.Ordinal)