关于一些字符串操作的常用方法

字符串操作

关于一些字符串操作常用方法

字符串截取
            string temp = "大家好, 我叫张三。";
            //索引从0开始截取索引5后面的所有字符串(包括5)
            Console.WriteLine(temp.Substring(5));
            //索引从0开始,截取索引5后面4个字符串(包括5)
            Console.WriteLine(temp.Substring(5, 4));
            Console.ReadKey();  

输出结果

输出结果.png

注意:字符串中的空格也会占用一个字节

字符串插入
            string temp = "大家好, 我叫张三。";
            //插入字符串,从索引从0开始的第4位插入字符串
            Console.WriteLine(temp.Insert(4, "他叫李四,"));
            Console.ReadKey();  

输出结果:

image

字符串移除
            string temp = "大家好, 我叫张三。";
            //移除指定字符串,从索引起始为0的第4位开始移除1个字节。
            Console.WriteLine(temp.Remove(4,1));//移除了空格
            Console.ReadKey();  

输出结果

image

字符串替换
            string temp = "大家好, 我叫张三。";
            //字符串替换:将字符串中的所有张三全部替换为李四
            Console.WriteLine(temp.Replace("张三", "李四"));
            Console.ReadKey();  

输出结果:

image


字符串拆分
           //拆分方式1
           string temp = "ip:192.168.250.1,port:8000,这个部分不会进行分割";
            char[] chars ={','};
            // 然后根据 ',' 分割 IP 地址,并获取前两部分
            string[] newtemp = temp.Split(chars,2);
            //拆分方式2
            //如果改成下面这句代码就会全部进行分割
            // string[] newtemp = temp.Split(chars);
            foreach (string text in newtemp)
            {
                Console.WriteLine("{0}", text);
            }
            Console.ReadKey();
            
            

输出结果:

拆分方式1:image


拆分方式2:image


字符串查找
           string temp = "192.168.250.1:8000:9000";
           //字符串查找,返回第一次出现“:”字符串的索引。
           Console.WriteLine("第一次出现“:”的索引是:"+temp.IndexOf(":"));
            //字符串查找,返回最后一次出现“:”字符串的索引。
            Console.WriteLine("最后一次出现“:”的索引是:" + temp.LastIndexOf(":"));
           //可搭配Substring方法使用,达到准确截取需要的字符串的目的。
            Console.WriteLine(temp.Substring(temp.IndexOf(":")+1,4));
            Console.WriteLine(temp.Substring(temp.LastIndexOf(":")+1,4));
            Console.ReadKey();

输出结果:
image

字符串大小写转换
            string temp = "Hello,World";
            Console.WriteLine(temp.ToLower());//全部转小写
            Console.WriteLine(temp.ToUpper());//全部转大写
            //字符判断,判断字符串中的索引从零开始的第三位是否为大写的,返回值为布尔
            Console.WriteLine(Char.IsUpper(temp, 3));
            Console.ReadKey();

输出结果:
image

空格删除
 string temp = "        大家好, 我叫张三。       a";
            //去空格:Trim删除字符串前后的空格, 
            //TrimStart:删除字符串前的。TrimEnd:删除掉字符串后的空格
            Console.WriteLine(temp.Trim());
            //也可以指定字符(仅限char类型,string不行)
            Console.WriteLine(temp.Trim('a'));
            Console.ReadKey();  

输出结果:
image


StringBuilder类的基本使用

字符串追加
            StringBuilder sb = new StringBuilder("Hello,World!");
            //字符串追加
            sb.Append("我是字符串追加");
            Console.WriteLine(sb.ToString());
            Console.ReadKey();

输出结果:

image

字符串替换
            StringBuilder sb = new StringBuilder("Hello,World!");
            //字符串替换
            sb.Replace("!", "???");
            Console.WriteLine(sb.ToString());
            Console.ReadKey();

输出结果:

image

字符串插入
           StringBuilder sb = new StringBuilder("哈喽,树哥!");
            //字符串插入,索引位置加插入内容
            sb.Insert(2, "啊");
            Console.WriteLine(sb.ToString());
            Console.ReadKey();

输出结果:

image


字符串移除
            StringBuilder sb = new StringBuilder("Hello,World!");
            //字符串移除,5是索引,7是要删除的字节数
            sb.Remove(5, 7);
            Console.WriteLine(sb.ToString());
            Console.ReadKey();

输出结果:

image


String与StringBuilder的区别

String 类型在 .NET 中是不可变的(immutable)。这意味着一旦一个字符串被创建,它的内容就不能被改变。每次你对字符串进行修改(如添加、删除、替换字符等),实际上都会在内存中创建一个全新的字符串对象,然后将修改后的内容复制到这个新对象中。这个过程涉及到分配新的内存和复制大量的字符,特别是当字符串很长或者修改操作很频繁时,这会导致显著的性能开销。

与 String 不同,StringBuilder 是可变的(mutable)。它内部维护了一个字符数组,当你对 StringBuilder 对象进行修改时(如添加、删除字符),它通常只是更新这个内部数组的内容,而不需要创建一个新的字符串对象。这减少了内存的分配和复制操作,从而提高了性能。

示例:

 string temp = "";
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 100000; i++)//耗时操作
            {
               temp += i.ToString();
            }
           sw.Stop();

           Console.WriteLine("temp所用时间:" + sw.Elapsed);
           
            StringBuilder sb = new StringBuilder();
            sw.Restart();
            for (int i = 0;i<100000;i++)//耗时操作
            {
                sb.Append(i);
            }
            sw.Stop();
            Console.WriteLine("sb所用时间:" + sw.Elapsed);
            Console.ReadKey();

输出结果:

image

posted @ 2024-09-12 09:09  烦人你  阅读(30)  评论(0)    收藏  举报