C#字符串操做总结数组
一、字符串的一些特性:工具
(1)不可变性:字符串是引用类型,当给字符串赋值时,会在堆中开辟一块空间来存放字符串,在栈中存放字符串在堆中的地址。(以下图所示)学习
(2)字符串池(针对字符串常量)ui
当程序中有多个相同的字符串常量时,这时,这些字符串都是指向内存中的同一个字符串,这个特性叫作:字符串池。之因此字符串池不会形成程序的混乱,是由于:字符串具备不可变性。spa
(3)字符串留用(*用的少)(Intern)。orm
string s1 = "a";blog
string s2 = "b";索引
string s3 = "c";内存
string s4 = s1+s2+s3;字符串
string s5 = s1+s2+s3;
//虽然s4和s5这两个字符串中的内容同样,可是在内存中是两块内存。
string x1="a";
string x2="bc";
string s4=string.intern(s1+s2+s3);
string s5=string.IsInterned(x1+x2);
//这个时候,s4和s5在堆中的地址就是同样的。(字符串留用)
String字符串:
属性:Length//获取字符串的个数(不管中文字符仍是英文字符都是一个char即一个字符
方法:
一、 空字符串的表示及判断:
(1)空字符串的表示:
string s = "";
string s = string.Empty;两个是同样的意思
string.Empty内部是一个静态只读的字符串,程序中共享一个内存,因为具备字符串池的概念,因此写多个它也会指向同一个内存,因此它与"" 同样
(2)空字符串的判断:
判断字符串为空能够 用msg=="",也能够用msg.Length==0(字符串长度为0,表示字符串为空)因此之后对字符串进行是否为空的判断时候,就用msg.Length ?=0来判断。
经过反编译工具,看到微软内部实现IsNullOrEmpty的方法,很值得学习!!!
public static bool IsNullOrEmpty(string value)
{
if (value != null)
{
return (value.Length == 0);
}
return true;
}
二、将字符串转换为字符数组再进行修改操做:
由于字符串是不可变的,而且在字符串的索引器中也只实现了一个只读的所引器(只有get),因此不能直接修改字符串中的内容但能够将字符串转换成char数组,而后再对其进行修改
三、判断字符串是否相等:
比较两个字符串是否相等能够用s1==s2也能够用s1.Equals(s2,StringComparison.OrdinalIgnore
Case)忽略大小写比较
//经过反编译工具能够看到,虽然使用的等号进行判断,但微软在内部仍是调用的Equals(运算符重载)
public static bool operator ==(string a, string b)
{
return Equals(a, b);
}
四、字符串分割方法:(几乎是万能的方法了,推荐给你们)
(1)引用命名空间:System.Text.RegularExpressions
(2)定义分割方式:string pattern = " ";(万能分割方式:string pattern = @"\s*,\s*|\s+";)
(3)开始分割:Regex.Split(s, pattern)
五、StringBuilder:
注意:
(1) StringBuilder 不等于 String,将StringBuilder转换为String.用ToString();
(2) StringBuilder仅仅是拼接字符串的工具,大多数状况下还须要把StringBuilder转换为String。
(3) StringBuilder sb = new StringBuilder();
sb.Append();//追加字符串
sb.ToString();//把StringBuilder转换为字符串。
sb.Insert();
sb.Replace();