什么是检查字符串是否在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字符串传递给测试函数来阻止编译器中的字符串替换优化。
所有时间都非常严格地围绕实际测试,并且不包括函数调用时间。
我测试了一次,10次,然后再次测试10,000次,并对每次测试的每组时间进行平均。
我使用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 ms
- 10 x = 0.860 ms
- 10,000 x = 0.821 ms
测试案例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, "[AZ]"); ms = (DateTime.Now - start).TotalMilliseconds; return result; }
平均时间:
- 1 x = 2.000 ms
- 10 x = 1.597 ms
- 10,000 x = 1.603 ms
测试案例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 ms
- 10 x = 0.357 ms
- 10,000 x = 0.298 ms
测试案例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 ms
- 10 x = 0.137 ms
- 10,000 x = 0.184 ms
有趣。
我希望这对RK先生表示满意;)
bool hasUpperCase(string str) { if (string.IsNullOrEmpty(str)) return false; return Regex.IsMatch(str, "[AZ]"); }
免责声明 :我不是正则表达式专家,但我使用字符串Testing, testinG, and tesTing,
测试了这Testing, testinG, and tesTing,
所有这些都评估为真。 但是,它也使用字符串TESTING
评估为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; }
在这里,我做了两个简单的方法,检查任何字符串的第一个字母,并将其从上到下转换为virse verca ….希望这将有助于你。
上述就是C#学习教程:什么是检查字符串是否在c#中具有大写字母的最快方法?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/957064.html