zoukankan      html  css  js  c++  java
  • C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?

    C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?这是一个很常见的命题,以前也没有注意,今天QQ群里有人提起,于是就做了下试验,代码如下:

    using System;
    using System.Diagnostics;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            private const int N = 10000000;
            private static Stopwatch watch = new Stopwatch();
            static void Main(string[] args)
            {
    
                string source = "abcdefghijklmnopqrstuvwxyz0123456789C#"
                              + "中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?.uonun";
                string target = "a";
                Console.WriteLine("目标为第一个字符时:");
                TestContains(source, target);
                TestIndexOf(source, target);
                Console.WriteLine();
    
                Console.WriteLine("目标为中部某个字符时:");
                target = "中";
                TestContains(source, target);
                TestIndexOf(source, target);
                Console.WriteLine();
    
                Console.WriteLine("目标为最后一个字符时:");
                target = "u";
                TestContains(source, target);
                TestIndexOf(source, target);
    
                Console.WriteLine("执行完毕,按任意键退出...");
                Console.ReadKey();
    
            }
            private static void TestIndexOf(string source, string target)
            {
                watch.Reset();
                watch.Start();
                for (int i = 0;i < N;i++)
                {
                    source.IndexOf(target);
                }
                watch.Stop();
                Console.WriteLine("IndexOf: " + watch.ElapsedMilliseconds.ToString() + "ms");
                return;
            }
    
            private static void TestContains(string source, string target)
            {
                watch.Reset();
                watch.Start();
                for (int i = 0;i < N;i++)
                {
                    source.Contains(target);
                }
                watch.Stop();
                Console.WriteLine("Contains: " + watch.ElapsedMilliseconds.ToString() + "ms");
                return;
            }
        }
    }
    

    得到的结果是:

    目标为第一个字符时:
    Contains: 973ms
    IndexOf: 1343ms

    目标为中部某个字符时:
    Contains: 1813ms
    IndexOf: 8602ms

    目标为最后一个字符时:
    Contains: 1433ms
    IndexOf: 5094ms
    执行完毕,按任意键退出...

    可以看出,使用Contains方法的效率比IndexOf的效率高很多。

  • 相关阅读:
    用户场景故事
    我喜欢的输入法
    课堂练习-----查找水王
    《你的灯亮着吗》阅读笔记1
    补第二阶段冲刺站立会议6(原6月8日)
    补第二阶段冲刺站立会议5(原6月7日)
    补第二阶段冲刺站立会议4(原6月6日)
    补第二次冲刺站立会议3(原6月5日)
    补第二次冲刺站立会议2(原6月4日)
    补第二次阶段冲刺站立会议1(原6月3日)
  • 原文地址:https://www.cnblogs.com/Byrd/p/3737261.html
Copyright © 2011-2022 走看看