字符串操作
关于一些字符串操作常用方法
字符串截取
string temp = "大家好, 我叫张三。";//索引从0开始截取索引5后面的所有字符串(包括5)Console.WriteLine(temp.Substring(5));//索引从0开始,截取索引5后面4个字符串(包括5)Console.WriteLine(temp.Substring(5, 4));Console.ReadKey();
输出结果
注意:字符串中的空格也会占用一个字节
字符串插入
string temp = "大家好, 我叫张三。";//插入字符串,从索引从0开始的第4位插入字符串Console.WriteLine(temp.Insert(4, "他叫李四,"));Console.ReadKey();
输出结果:
字符串移除
string temp = "大家好, 我叫张三。";//移除指定字符串,从索引起始为0的第4位开始移除1个字节。Console.WriteLine(temp.Remove(4,1));//移除了空格Console.ReadKey();
输出结果
字符串替换
string temp = "大家好, 我叫张三。";//字符串替换:将字符串中的所有张三全部替换为李四Console.WriteLine(temp.Replace("张三", "李四"));Console.ReadKey();
输出结果:
字符串拆分
//拆分方式1string 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:
拆分方式2:
字符串查找
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();
输出结果:
字符串大小写转换
string temp = "Hello,World";Console.WriteLine(temp.ToLower());//全部转小写Console.WriteLine(temp.ToUpper());//全部转大写//字符判断,判断字符串中的索引从零开始的第三位是否为大写的,返回值为布尔Console.WriteLine(Char.IsUpper(temp, 3));Console.ReadKey();
输出结果:
空格删除
string temp = " 大家好, 我叫张三。 a";//去空格:Trim删除字符串前后的空格, //TrimStart:删除字符串前的。TrimEnd:删除掉字符串后的空格Console.WriteLine(temp.Trim());//也可以指定字符(仅限char类型,string不行)Console.WriteLine(temp.Trim('a'));Console.ReadKey();
输出结果:
StringBuilder类的基本使用
字符串追加
StringBuilder sb = new StringBuilder("Hello,World!");//字符串追加sb.Append("我是字符串追加");Console.WriteLine(sb.ToString());Console.ReadKey();
输出结果:
字符串替换
StringBuilder sb = new StringBuilder("Hello,World!");//字符串替换sb.Replace("!", "???");Console.WriteLine(sb.ToString());Console.ReadKey();
输出结果:
字符串插入
StringBuilder sb = new StringBuilder("哈喽,树哥!");//字符串插入,索引位置加插入内容sb.Insert(2, "啊");Console.WriteLine(sb.ToString());Console.ReadKey();
输出结果:
字符串移除
StringBuilder sb = new StringBuilder("Hello,World!");//字符串移除,5是索引,7是要删除的字节数sb.Remove(5, 7);Console.WriteLine(sb.ToString());Console.ReadKey();
输出结果:
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();
输出结果: