【问题标题】:Is there a built-in IsLowerCase() in .NET?.NET 中是否有内置的 IsLowerCase()?
【发布时间】:2008-12-23 15:16:30
【问题描述】:

.NET 中是否有内置的IsLowerCase()

【问题讨论】:

  • 在您需要考虑其他语言环境之前,实现只是微不足道的......
  • 这是字符串还是字符?

标签: .net string


【解决方案1】:
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();

【讨论】:

    【解决方案2】:

    你的意思是Char.IsLower(ch);

    【讨论】:

      【解决方案3】:

      请记住,本地化使这成为一个重要的问题。只要您不在乎,第一个示例就可以:

      string s = ...
      s.All(c => char.IsLower(c));
      

      如果你在乎,就这样做:

      s.ToLower(CultureInfo.CurrentUICulture) == s;
      

      这让您有机会解决文化问题。

      【讨论】:

      • 为什么不 s.All(c => char.IsLower(c))?
      • dalle:您需要先执行 String.ToCharArray(),然后才能对字符执行 lambda 表达式。即 bool isStringLower = str.ToCharArray().All(c => char.IsLower(c));
      • @DrJokepu:实际上,在执行 lambda 之前,您不需要执行 ToCharArray() - 我刚刚对其进行了测试,它在字符串上也可以正常工作...
      • @DrJokepu:根据msdn.microsoft.com/en-us/library/…你不需要它。
      • 啊,我认为 IntelliSense 只是将它们压制在字符串上。我会修改我的答案。
      【解决方案4】:

      编辑:没有看到您问题的实际含义。你可以使用:

      char.IsLower(c);
      

      就不同情况之间的轻松转换而言:

      当然是:

      MSDN says

       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)。

      【讨论】:

      • 我想他要问的是是否有一个函数可以识别小写字符串
      【解决方案5】:

      正如其他人所提到的,您可以使用 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,因为字符串中包含大写字符。

      【讨论】:

      • 只需“return Input.All(c => char.IsLower(c))”就足够了,而且速度更快,因为它可以在找到第一个大写字母后立即返回。
      • 啊,很好...我从来没有注意到你可以对字符串对象执行 All...谢谢。
      【解决方案6】:

      怎么样:

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

      【讨论】:

      • 在这种情况下,长篇大论是故意的。是的,我认为 asd234as!!!df 是小写的。 2,3,4 和 !根据定义,根本没有大小写,所以小写和大写。
      【解决方案7】:

      巴拉巴斯特, 请不要将此方法与 FindAll/Count 一起使用。你只需要

      return Input.ToList().Exists(c => Char.IsUpper(c));
      

      它将停止对第一个大写字符的迭代。FindAll 创建一个新的 List 并且您只使用 Count 属性。如果我们有一个大写的长字符串,您最终会得到原始字符串的副本。

      【讨论】:

      • @Petrov: .All(如我所用)在第一次存在非小写字符时退出。您的建议同样冗长。如果你放弃 ToList().Exists() 而只使用 .All(c => char.IsLower(c)) 那么你会得到更好的结果!
      【解决方案8】:

      伙计们,为什么这种 LINQ 滥用 (ToList(), ToArray(), All(), Any(), ...) ?我也喜欢 LINQ 和 lambda,但在这种情况下,我认为我们需要的是旧的 foreach。请参阅 TcKs 的答案作为参考 - 但如果我们删除多余的,我们可以做得更好

      char.IsLetter( c )
      

      因为 IsLower() 也在做同样的检查。

      【讨论】:

      • 因为一个不错的 .All(c => Char.IsLower(c)) 处理了所有事情......忘记迭代集合 - 只需像查询数据库中的表一样查询它.更优雅...
      猜你喜欢
      • 1970-01-01
      • 2011-03-16
      • 2011-01-08
      • 1970-01-01
      • 2010-11-25
      • 2014-05-15
      • 2011-05-06
      • 2011-11-02
      • 2010-11-23
      相关资源
      最近更新 更多