当给一个字符串重新赋值之后,老值并没有被销毁,而是指向了一个新开辟的空间,该空间存储新值。
当程序结束后,GC扫描整个内存,如果发现有的空间没有任何指向,则该空间被回收。
string s1 = "张三"; string s2 = "张三"; Console.ReadKey();
观察即时窗口:
上面是栈中的地址,下面是堆中的地址,可以发现,栈中地址不同,堆中地址相同
我们可以将字符串看作是char类型的一个只读数组,所以通过索引不能改变字符串的值
如果想改变字符串,首先需要利用ToCharString()方法将字符串转换为char类型的数组,改变完再转回去
string s = "abcdefg"; char[] chs = s.ToCharString(); chs[0] = 'b'; s = new string(chs);
为了简化字符串的使用,引入StringBuilder类
计时器
Stowatch类
Stopwatch sw = new Stopwatch(); sw.Start(); sw.Stop(); Console.WriteLine(sw.Elapsed);
StringBuilder sb new StringBuilder(); sb.Append(); string str = sb.ToString();
.Append()
str1.Length()
str1 = str1.ToUpper()
str2 = str2.ToLower()
==
str1.Equals(str2)(区分了大小写)
str1.Equals(str2, StringComparision.OrdinalIgnoreCase)(忽略了大小写差异)
分割字符串str.Split(chs,StringSplitOption.RemoveEmptyEntries)
string str = "a b dfd _ + = ,,, fdf "; //分割字符串Split char[] chs = {' ','_','+','=',','}; string[] str = s.Split(chs, StringSplitOption.RemoveEmptyEntries);
返回字符串类型的数组
替换字符串str.Replace(substr1,substr2)与字符串查询str.Contains(substr)
string str = "国家关键人物老赵"; if(str.Contains("老赵")) { str = str.Replace("老赵","**"); } Console.WriteLine(str);
str.Contains()方法和str.Replace()方法
截取字符串str.Substring(StartIndex)
string str = "今天天气好晴朗,处处好风光"; str = str.Substring(1);//从索引1截取到最后 Console.WriteLine(str);
从索引处截取到最后,包含这个索引。
string str = "今天天气好晴朗,处处好风光"; str = str.Substring(1,2);//从索引1截取到索引2 Console.WriteLine(str);
包括索引1
string str = "今天天气好晴朗,处处好风光"; if (str.StartWith("今天"))//str.EndWith("风光"); { Console.WriteLine("是的"); } else { Console.WriteLine("不是的"); }
string str = "今天天气好晴朗,处处好风光" int index = str.IndexOf('天',1); int index2 = str.LastIndexOf('天'); Console.WriteLine(index);
从索引1开始找,包括索引1
string str =" hahaha " str = str.Trim();//去掉所有的空格 str1 = str.TrimStart();//去掉开始的空格 str2 = str.TrimEnd();//去掉结尾的空格 Console.WriteLine(str);
string str = "";//null bool bl = string.IsNullOrEmpty(str);
string[] str = {"张三","李四","王五"}; string strNew = string.Join("|",str); Console.WriteLine(strNew);
关键词 | 作用 | 实例方法/静态方法 | 语法举例 |
---|---|---|---|
Length | 获得当前字符串中字符的个数 | 实例方法 | str.Length() |
ToUpper | 将字符转换成大写形式 | 实例方法 | str.ToUpper() |
ToLower | 将字符串转换成小写形式 | 实例方法 | str.ToLower() |
Equals | 比较两个字符串 | 实例方法 | str1.Equals(str2,stringComparison.OrdinalIgnoreCase) |
Split | 分割字符串,返回字符串类型的数组 | 实例方法 | str.Split(chs) |
SubString | 截取字符串,在截取的时候包含要截取的那个位置 | 实例方法 | str.SubString(Index) |
IndexOf | 判断某个字符串在字符串中第一次出现的位置,如果没有返回-1 | 实例方法 | str.IndexOf(subString,FindIndex) |
LastIndexOf | 判断某个字符串在字符中最后一次出现的位置,如果没有返回-1 | 实例方法 | str.LastIndexOf(subString) |
StartsWith | 判断以...开始 | 实例方法 | str.StartWith(subString) |
EndsWith | 判断以...结束 | 实例方法 | str.StartWith(subString) |
Replace | 将字符串中某个字符串替换成指定的字符串 | 实例方法 | str.Replace(subString) |
Contains | 判断某个字符串是否包含指定的字符串 | 实例方法 | str.Contains(subString) |
Trim | 去掉字符串中前后的空格 | 实例方法 | str.Trim() |
TrimEnd | 去掉字符串后面的空格 | 实例方法 | str.TrimEnd() |
TrimStart | 去掉字符串前面的空格 | 实例方法 | str.TrimStart() |
IsNullOrEmpty | 判断字符串是否为空或者null | 静态方法 | string.IsNullOrEmpty(str) |
Join | 以特定分隔符链接字符串数组 | 静态方法 | sring.Join(subString,str) |
有时间自己写一遍。