字符串
字符串的特性
- 字符串的不可变性
当给一个字符串重新赋值之后,老值并没有被销毁,而是指向了一个新开辟的空间,该空间存储新值。
当程序结束后,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类
为了简化字符串的使用,引入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()
string字符串常用方法
- 字符串长度str.Length()
str1.Length()
- 字符串大小写转换str.ToUpper() str.ToLower()
str1 = str1.ToUpper()
str2 = str2.ToLower()
- 字符串比较str1.Equals(str2)
==
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
- 判断字符串从某个字符串起始str.StartWith("substr"),结束str.EndWith("substr")
string str = "今天天气好晴朗,处处好风光";
if (str.StartWith("今天"))//str.EndWith("风光");
{
Console.WriteLine("是的");
}
else
{
Console.WriteLine("不是的");
}
- 判断字符串中某一个字符的索引str.IndexOf('char',FindIndex)
string str = "今天天气好晴朗,处处好风光"
int index = str.IndexOf('天',1);
int index2 = str.LastIndexOf('天');
Console.WriteLine(index);
从索引1开始找,包括索引1
- 从字符串中一处所有的空格str.Trim()
string str =" hahaha "
str = str.Trim();//去掉所有的空格
str1 = str.TrimStart();//去掉开始的空格
str2 = str.TrimEnd();//去掉结尾的空格
Console.WriteLine(str);
- 判断字符串是否为空string.IsNullOrEmpty(str)
string str = "";//null
bool bl = string.IsNullOrEmpty(str);
- 使用指定分隔符凭借字符串数组string.Join(分隔符,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) |
字符串的处理 练习
有时间自己写一遍。