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的效率高很多。

  • 相关阅读:
    NIO 学习笔记
    Spring Boot 学习笔记
    Java集合框架
    StringBuffer&StringBuilder类
    String 类
    Java 重写 hashCode() 和 equals() 方法
    Java 基本数据类型 && 位运算
    [SequenceFile_1] Hadoop 序列文件
    Windows 下端口被占用
    Java 反射机制
  • 原文地址:https://www.cnblogs.com/Byrd/p/3737261.html
Copyright © 2011-2022 走看看