------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
字符串
C#中单个字符用单引号包含就是char类型,‘a’,单引号中放且只能放一个字符。(ASCII码)
单个字符也可以表示为字符串,(字符串可看作是char数组)
还可以有长度为0的字符串。null和""的区别,String.IsNullOrEmpty
使用s.Length属性来获得字符串中的字符个数—— (字符串长度)
string可以看做是char的只读数组。char c = s[1];。
C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。
如果要对char进行修改,那么就必须创建一个新的字符串,用s. ToCharArray()方法得到字符串的char数组,对数组进行修改后,
调用new string(char[])这个构造函数来创建char数组的字符串。一旦字符串被创建,那么char数组的修改也不会造成字符串的变化。
常见疑问:
string s = "abc";s="123",s这不是可变的吗?
要区分变量名和变量指向的值的区别。程序中可以有很多字符串,然后由字符串变量指向他们,变量可以指向其他的字符串,
但是字符串本身没有变化。字符串不可变性指的是内存中的字符串不可变,而不是变量不变。
string s1="hello"; string s10 = s1;
s10指向s1指向的字符串,而不是s10指向s1,哪怕s1以后指向了其他内存,那么s10还是指向"hello"——字符串是引用类型,传递的是引用,指向实际值的地址
string类常用函数
ToLower():得到字符串的小写形式。
注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。
s.ToLower()与s=s.ToLower()
ToUpper():得到字符串的大写形式;
Trim()去掉字符串两端的空白(不会去掉中间的)。
s1.Equals(s2, StringComparison.OrdinalIgnoreCase),两个字符串进行比区分大小写的比较。
—— StringComparison枚举值;OrdinalIgnoreCase比较方式!! 返回true则s1跟s2相同。
string s2 = string.Format("{0}年{1}月{2}日", year, month, day);
string s1 = string.Join("|", values);//第一个参数是string类型分隔符
字符串的分割
string[] Split(params char[] separator):将字符串按照指定的分割符分割为字符串数组;
string[] Split(char[] separator, StringSplitOptions options)将字符串按照指定的char分割符
分割为字符串数组( options 取RemoveEmptyEntries的时候移除结果中的空白字符串);
string[] Split(string[] separator, StringSplitOptions options)将字符串按照指定的string分割符分割为字符串数组。
字符串函数(2)
字符串替换:string Replace(string oldValue, string newValue)将字符串中的出现oldValue的地方替换为newValue。例子:名字替换。
取子字符串:string Substring(int startIndex),取从位置startIndex开始一直到最后的子字符串;
string Substring(int startIndex, int length),取从位置startIndex开始长度为length的子字符串,如果子字符串的长度不足length则报错。
案例:截取字符串前5个,string s2 = s1.Substring(0, Math.Min(s1.Length, 5));//取字符串的长度和5中的最小值来截取。谁小取谁。
bool Contains(string value)判断字符串中是否含有子串value
bool StartsWith(string value)判断字符串是否以子串value开始;
bool EndsWith (string value)判断字符串是否以子串value结束;
int IndexOf(string value):取子串value第一次出现的位置。
------------------------------------------------------------------------------------------------------------------------------
StringBuilder sb=new StringBuilder()可以创建一个可变长字符串。
当把一个字符串变量赋给另一个字符串变量时,会得到内存中同一个字符串的两个引用,
但与引用类型在常见的操作上又有区别。当你修改其中一个字符串的时候,
会创建一个全新的String对象,其引用的原字符串并不会改变,因而另一个字符串变量的值不变。
但与引用类型在常见的操作上又有区别。当你修改其中一个字符串的时候,
会创建一个全新的String对象,其引用的原字符串并不会改变,因而另一个字符串变量的值不变。
当我们创建了字符串对象a,它的值是“1234”,当我们再创建一个值为“1234”的字符串对象
b时它不会再去分配一块内存空间,而是直接指向了a在内存中的地址。
b时它不会再去分配一块内存空间,而是直接指向了a在内存中的地址。