【发布时间】:2008-12-23 15:16:30
【问题描述】:
.NET 中是否有内置的IsLowerCase()?
【问题讨论】:
-
在您需要考虑其他语言环境之前,实现只是微不足道的......
-
这是字符串还是字符?
.NET 中是否有内置的IsLowerCase()?
【问题讨论】:
public static bool IsLowerCase( this string text ) {
if ( string.IsNullOrEmpty( text ) ) { return true; }
foreach ( char c in text )
if ( char.IsLetter( c ) && !char.IsLower( c ) )
return false;
return true;
}
"someString".IsLowerCase();
【讨论】:
你的意思是Char.IsLower(ch);?
【讨论】:
请记住,本地化使这成为一个重要的问题。只要您不在乎,第一个示例就可以:
string s = ...
s.All(c => char.IsLower(c));
如果你在乎,就这样做:
s.ToLower(CultureInfo.CurrentUICulture) == s;
这让您有机会解决文化问题。
【讨论】:
编辑:没有看到您问题的实际含义。你可以使用:
char.IsLower(c);
就不同情况之间的轻松转换而言:
当然是:
string upper = "CONVERTED FROM UPPERCASE";
Console.WriteLine(upper.ToLower());
它是string 类的一部分。
还有TextInfo 类:
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
Console.WriteLine(textInfo.ToTitleCase(title));
Console.WriteLine(textInfo.ToLower(title));
Console.WriteLine(textInfo.ToUpper(title));
这允许更多的变化来改变上限和诸如此类的东西(如ToTitleCase)。
【讨论】:
正如其他人所提到的,您可以使用 char.IsLower(ch) 轻松地为单个字符执行此操作
但要扩展 String 原语,这不会很困难。您可以使用 Runtime.CompilerServices 命名空间相对简单地扩展 BCL:
Imports System.Runtime.CompilerServices
Module CustomExtensions
<Extension()> _
Public Function IsLowerCase(ByVal Input As String) As Boolean
Return Return Input.All(Function(c) Char.IsLower(c))
End Function
End Module
或者在 C# 中,这将是:
using System.Runtime.CompilerServices;
static class CustomExtensions
{
public static bool IsLowerCase(this string Input)
{
return Input.All(c => char.IsLower(c));
}
}
现在您可以使用:
Console.WriteLine("ThisIsMyTestString".IsLowerCase())
这将返回 false,因为字符串中包含大写字符。
【讨论】:
怎么样:
public bool IsLower(string TestString)
{
if (String.IsNullOrEmpty(TestString))
{
return true;
}
string testlower = TestString.ToLowerInvariant();
if (String.Compare(TestString, testlower, false) == 0)
{
return true;
}
else
{
return false;
}
}
【讨论】:
巴拉巴斯特, 请不要将此方法与 FindAll/Count 一起使用。你只需要
return Input.ToList().Exists(c => Char.IsUpper(c));
它将停止对第一个大写字符的迭代。FindAll 创建一个新的 List 并且您只使用 Count 属性。如果我们有一个大写的长字符串,您最终会得到原始字符串的副本。
【讨论】:
伙计们,为什么这种 LINQ 滥用 (ToList(), ToArray(), All(), Any(), ...) ?我也喜欢 LINQ 和 lambda,但在这种情况下,我认为我们需要的是旧的 foreach。请参阅 TcKs 的答案作为参考 - 但如果我们删除多余的,我们可以做得更好
char.IsLetter( c )
因为 IsLower() 也在做同样的检查。
【讨论】: