#方法一: 使用 string.Contains 方法
string.Contains 是大小写敏感的, 如果要用该方法来判断一个 string 是否包含某个关键字 keyword, 需要把这个 string 和这个 keyword 都转成小写或大写再调用 Contains 方法;
- string key = "bbb";
- string temp = "aaaBBBcccDDD";
- bool isContains= temp.ToLower().Contains(key.ToLower());//true
- # 方法二: 使用 sring.Index 方法
使用 string.Index 方法, 然后通过 StringComparison.OrdinalIgnoreCase 指定查找过程忽略大小写;
- string key = "bbb";
- string temp = "aaaBBBcccDDD";
- bool isContains = temp.IndexOf(key,StringComparison.OrdinalIgnoreCase)>=0;//true
- #那什么时候使用 Contains 方法, 什么时候使用 Index 方法, 哪个效率高?
1, 测试代码:
注: 此测试针对的是拥有大量英文的情况下, 并且指定的字符串为英文
每个方法测试 1 千万次, 输出所用时间;
- class Program
- {
- private const int N = 10000000;
- private static Stopwatch watch = new Stopwatch();
- static void Main(string[] args)
- {
- string source = "aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqq";
- string target = "AAA";
- Console.WriteLine("目标在开头部分时:");
- Console.WriteLine("不区分大小写:");
- TestContains(source, target,true);
- TestIndexOf(source, target,true);
- Console.WriteLine("区分大小写:");
- target = "aaa";
- TestContains(source, target,false);
- TestIndexOf(source, target,false);
- Console.WriteLine();
- Console.WriteLine("目标在中部时:");
- Console.WriteLine("不区分大小写:");
- target = "HHH";
- TestContains(source, target, true);
- TestIndexOf(source, target, true);
- Console.WriteLine("区分大小写:");
- target = "hhh";
- TestContains(source, target, false);
- TestIndexOf(source, target, false);
- Console.WriteLine();
- Console.WriteLine("目标在结尾时:");
- Console.WriteLine("不区分大小写:");
- target = "QQQ";
- TestContains(source, target,true);
- TestIndexOf(source, target,true);
- Console.WriteLine("区分大小写:");
- target = "qqq";
- TestContains(source, target,false);
- TestIndexOf(source, target,false);
- Console.WriteLine("执行完毕, 按任意键退出...");
- Console.ReadKey();
- }
- private static void TestIndexOf(string source, string target,bool isIgnoreCase)
- {
- watch.Reset();
- watch.Start();
- for (int i = 0; i < N; i++)
- {
- if (isIgnoreCase)
- source.IndexOf(target, StringComparison.OrdinalIgnoreCase);
- else
- source.IndexOf(target);
- }
- watch.Stop();
- Console.WriteLine("IndexOf:" + watch.ElapsedMilliseconds.ToString() + "ms");
- return;
- }
- private static void TestContains(string source, string target,bool isIgnoreCase)
- {
- watch.Reset();
- watch.Start();
- for (int i = 0; i < N; i++)
- {
- if (isIgnoreCase)
- source.ToLower().Contains(target.ToLower());
- else
- source.Contains(target);
- }
- watch.Stop();
- Console.WriteLine("Contains:" + watch.ElapsedMilliseconds.ToString() + "ms");
- return;
- }
- }
2, 测试结果:
3, 总结
从测试结果 (大量测试) 中能明显看出, 当拥有大量英文的字符串中:
当不区分大小写时, string.IndexOf 方法的效率明显高于 string.Contains 方法;
当区分大小写时, string.Contains 方法的效率明显高于 string.IndexOf 方法;
如果判断的是中文, 没有大小写之分, 还是 string.Contains 方法的效率高;
来源: https://www.cnblogs.com/willingtolove/p/9782533.html