检查字符串在C#中是否具有大写字母的最快方法是什么?

如何解决检查字符串在C#中是否具有大写字母的最快方法是什么?

| 我的第一个实现想法是简单地做:
bool hasUpperCase (string str) {
    if(string.IsNullOrEmpty(str))
         return false;
    for (int i = 0; i < str.Length; i++) {
        if (char.IsUpper (str[i]))
            return true;                    
    }
    return false;
}
但是也许还有另一种更快的方法呢?     

解决方法

        你可以减少到
bool HasUpperCase (string str) {
    return !string.IsNullOrEmpty(str) && str.Any(c => char.IsUpper(c));
}
使用LINQ。     ,        从这里作弊:
bool hasUpperCase (string str) {
 if(string.IsNullOrEmpty(str))
     return false;

  return str != str.ToLower();
}
    ,        好的-是时候为新的真理了! 这是对字符串中任何大写字符的测试。 保证该字符串在前60K个字符内没有任何大写字符。 (我从random.org创建了字符串) 我通过随机分配哪个64K字符串传递给测试函数来防止编译器中的字符串替换优化。 所有计时都严格地围绕实际测试进行,并且不包括函数调用时间。 我对测试进行了一次,十次和一万次的测试,并平均了每个测试的每组计时。 我在i3-2100 CPU @ 3.1 Ghz的64位Win 7上进行了测试 测试案例1:
   static bool testCaseOne(string str,out double ms)
    {
        bool result = false;
        DateTime start = DateTime.Now;

        result = !string.IsNullOrEmpty(str) && str.Any(c => char.IsUpper(c));
        ms = (DateTime.Now - start).TotalMilliseconds;
        return result;
    }
产生的平均时间: 1 X = 3.000毫秒 10 x = 0.860毫秒 10,000 x = 0.821毫秒 测试案例2:
    static bool testCaseTwo(string str,out double ms)
    {
        bool result = false;
        DateTime start = DateTime.Now;

        if (string.IsNullOrEmpty(str))
        {
            ms = 0;
            return false;
        }
        result = Regex.IsMatch(str,\"[A-Z]\");

        ms = (DateTime.Now - start).TotalMilliseconds;

        return result;
    }
产生的平均时间: 1 x = 2.000毫秒 10 x = 1.597毫秒 10,000 x = 1.603毫秒 测试案例3:
   static bool testCaseThree(string str,out double ms)
    {
        bool result = false;
        DateTime start = DateTime.Now;

        if (string.IsNullOrEmpty(str))
        {
            ms = 0;
            return false;
        }
        for (int i = 0; i < str.Length; i++)
        {
            if (char.IsUpper(str[i]))
            {
                result = true;
                break;
            }
        }
        ms = (DateTime.Now - start).TotalMilliseconds;
        return result;
    }
产生的平均时间: 1 x = 1.000毫秒 10 x = 0.357毫秒 10,000 x = 0.298毫秒 测试案例4:
    static bool testCaseFour(string str,out double ms)
    {
        bool result = false;
        DateTime start = DateTime.Now;

        if (string.IsNullOrEmpty(str))
        {
            ms = 0;
            return false;
        }
        for (int i = 0; i < str.Length; i++)
        {

            if (str[i] > 64 && str[i] < 91)
            {
                result = true;
                break;
            }
        }
        ms = (DateTime.Now - start).TotalMilliseconds;
        return result;
    }

}
产生的平均时间: 1 x = 0.000毫秒 10 x = 0.137毫秒 10,000 x = 0.184毫秒 有趣。 我希望这能使R. K.先生满意;)     ,        
bool hasUpperCase(string str) {
    if (string.IsNullOrEmpty(str))
        return false;
    return Regex.IsMatch(str,\"[A-Z]\");
}
免责声明:我不是Regex专家,但我使用字符串
Testing,testinG,and tesTing,
进行了测试,所有字符串均评估为true。但是,它也可以用字符串ѭ9evaluated评估为true,您可能想要也可能不想要。     ,        代码对我来说看起来不错,因为您需要提高性能,所以可以通过从反面添加条件检查来将for循环从O(n)减少到O(n / 2 +〜1)。 否则,您可以检查两个后续元素,并将i递增2。显然,您应该为第二个参数检查i
bool hasUpperCase (string str) {
if(string.IsNullOrEmpty(str))
     return false;
for (int i = 0; i < str.Length; i= i + 2) {
    if (char.IsUpper (str[i]))
        return true;                    

    if ((i + 1) < str.Length && char.IsUpper (str[i+1]))
        return true;                    
}
return false;
} 恕我直言,该技巧可能有助于回答算法面试,并没有太大的性能。     ,        
    public static string Upper_To_Lower(string text)
    {
        if (Char.IsUpper(text[0]) == true) { text = text.Replace(text[0],char.ToLower(text[0])); return text; }

        return text;
    }

    public static string Lower_To_Upper(string text)
    {
        if (Char.IsLower(text[0]) == true) { text = text.Replace(text[0],char.ToUpper(text[0])); return text; }

        return text;
    }
在这里,我提出了2个简单的方法,它们检查任何字符串的首字母并将其从Upper转换为Lower并转换为verca ....希望对您有所帮助。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?