检测一个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)