字符串特性:不可变性,不管对字符串做什么操作,都会在内存中产生一块新的实例。
特性:驻留池
string s1="张三"; string s2="张三";
s1和s2指向堆中的同一个引用,为了节省内存
如果给s2重新赋值为“李四“,s1不会变,因为s2是重新分配的一块空间,就是字符串的不可变性,”张三“不会被GC销毁,因为s1仍然指向”张三“
字符串方法
IsNullOrEmpty() 判断字符串是null还是System.String.Empty
string s=""; if(string.IsNullOrEmpty(s)){}
我们可以将一个字符串看作是char类型的只读数组
ToCharArray() 返回字符数组
string str="abcdef"; char[] ch= str.ToCharArray();//字符串转字符数组 ch[2]=h; //char数组转字符串 string english=new string(ch); //字符串可以通过下标访问某个字符 Console.WriteLine(english[0]);
ToLower() 转小写
ToUpper() 转大写
Equals() 比较两个字符串是否相等
对于string类型而言,不管是==还是Equals比较的都是值本身
string s1="aBc"; string s2="ABc"; //StringComparison.OrdinalIgnoreCase忽略被比较字符串的大小写 if(s1.Equals(s2,StringComparison.OrdinalIgnoreCase)){} Person p1=new Person(){Name="张三",Age=18}; Person p2=new Person(){Name="李四",Age=18}; //这两个判断都为false if(p1==p2){} if(p1.Equals(p2)){} Person p3=new Person(){Name="王五",Age=18}; Person p4=new Person(){Name="王五",Age=18}; //这两个判断依然为false if(p3==p4){} if(p3.Equals(p4)){} //如果在Person类里重写Equals方法,这个判断就为true了 if(p3.Equals(p4))
{
Console.WriteLine(p3.ToString());//这个对象所在类的命名空间
} class Person { public string Name{get;set;} public int Age{get;set;} public override bool Equals(object obj) { Person person=obj as Person; if(this.Name==Person.Name&&this.Age==person.Age) { return true; } else { return false; } } }
Equals默认比较的是地址,但是我们在自己定义的类中如果用到Equals,都会将Equals进行重写,使之按照我们自己的需求进行比较
ToString()也可重写
IndexOf() 第一次出现的位置
LastIndexOf() 最后一次出现的位置
string str="Hello World"; //在字符串中找到o第一次出现的位置,默认从0开始找 int index=str.IndexOf('o'); //从下标为2的位置找,包含2 int index2=str.IndexOf('o',2); //最后一次出现的位置 int index2=str.LastIndexOf('o');
如果找不到返回-1
SubString() 截取字符串
string name="小明今天出去玩,非常高兴"; int index = name.IndexOf(","); //从当前位置截取字符串,默认截到最后 string str=name.SubString(index+1);
Split() 分割
string str="a,b---. c,d"; //StringSplitOptions.RemoveEmptyEntries移除分割后数组中的”“空 str.Split(new char[]{',','-','-'},StringSplitOptions.RemoveEmptyEntries); //字符串--->char类型数组 ToCharArray() //字符串--->string类型的数组 Split() //如果只是开头和结尾有空格,可以使用Trim(),返回的是字符串 string name=" 张三 "; name.Trim(); //参数也可以为char数组,或字符 string intro=",,,, 大家好,我是小明----"; intro.Trim(',',' ','-');
Join() 连接
string[] name={"阿紫","小红","小白","小明"}; string str=string.Join("&",name);
Replace() 替换
string content="小明,你是个不知羞耻的人"; if(content.Contains("不知羞耻")) { content = content.Replace("不知羞耻","****"); }