1、C#中单个字符用单引号包含就是char类型,(‘a’),单引号中放且只能放一个字符。ASCII码。
2、单个字符也可以表示为字符串,还可以有长度为0的字符串。null和""的区别,String.IsNullOrEmpty
3、使用s.Length属性来获得字符串中的字符个数。
4、string可以看做是char的只读数组。char c = s[1];。例子:遍历输出string中的每个元素。
5、C#中字符串有一个重要的特性:不可变性。字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。
6、如果要对char进行修改,那么就必须创建一个新的字符串,用s. ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数(暂时不用细研究)来创建char数组的字符串。一旦字符串被创建,那么char数组的修改也不会造成字符串的变化。例子:将字符串中的A替换为a。
7、字符串是不可变的,所以要先生成一个char[],再对char[]进行修改。再根据char[]生成新的字符串,但是原先的字符串没有改变(他就在那里)。可以根据人生成模型,也可以根据模型生成人,但是人不能修改。这样根据李咏生成模型,然后把脸搞短,再生成李咏2,李咏2和李咏是两个对象。
s=new string(s);//相当于李咏2把李咏杀死替换了李咏,好像李咏脸变短了,但是是两个实例
string s="abc";//是声明一个变量s,把s指向"abc"这个字符串。
string s1 = "123456";
char[] chars1 = s1.ToCharArray();//是根据s1复制一份char[]
chars1[0] = 'w';//不会影响s1
string s2 = new string(chars1);//根据chars1产生一份新的string
Console.WriteLine(s2);
Console.WriteLine(s1);
chars1[0] = 'c';//并不会影响s2
Console.WriteLine(s2);
面试练习题:字符串转换为大写、小写、翻转,inttostring 。
8、是一个拷贝的过程:
string s1 = "123456";
char[] chars1 = s1.ToCharArray();//是根据s1复制一份char[]
chars1[0] = 'w';//不会影响s1
string s2 = new string(chars1);//根据chars1产生一份新的string
Console.WriteLine(s2);
Console.WriteLine(s1);
chars1[0] = 'c';//并不会影响s2
Console.WriteLine(s2);
9、练习:c#时间格式转换汉字大写 比如: "2009年9月5日" 转换成 "二零零九年九月五日",输入字符串,返回字符串。写成一个函数。string ToCH(string s) 。
string[] c = new string[]{ "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖","年","月","日" };
try
{
string input = "2009年9月5日";
StringBuilder str = new StringBuilder();
for (int count = 0; count < input.Length; count++)
{
string temp = input.Substring(count,1);
switch (temp)
{
case "1": str.Append(c[1]); break;
case "2": str.Append(c[2]); break;
case "3": str.Append(c[3]); break;
case "4": str.Append(c[4]); break;
case "5": str.Append(c[5]); break;
case "6": str.Append(c[6]); break;
case "7": str.Append(c[7]); break;
case "8": str.Append(c[8]); break;
case "9": str.Append(c[9]); break;
case "0": str.Append(c[0]); break;
case "年": str.Append(c[10]); break;
case "月": str.Append(c[11]); break;
case "日": str.Append(c[12]); break;
default: break;
}
}
this.button1.Text = str.ToString();
}
catch (Exception ex)
{
throw new Exception("已经过测试");
}
10、string s=null; //空的,没有字符串
string s=””; //有字符串,只是这个字符串是空的,即长度为0
11、string s=”abdngf”;
if(s==null || s==”” || s==string.Empty) //判断s是否为空,后两个是一样的。
if(string.IsNullOrEmpty(s)) //等价于上一行
12、读取出字符串里的某个字符:
string s=”abcdsfkho”;
int i=s.Length; //获取字符串s的长度
char c=s[3]; //获取字符串s的第3个字符,即d
13、数组声明以后,就不能再改变其长度了,但是可以改变具体元素的内容。
字符串声明以后,就不能改变其长度和内容了,想要改变内容,只能重新赋值,因为字符串在C#中是只读。
string s=”abcdsfhkog”;
char[] chars=s.ToCharArray(); //将字符串s转换为char类型的数组
chars[2]=’w’; //将第二个元素改为‘w’,即,将‘c’改为‘w’
string s1=new string(chars); //将chars数组转换为字符串并赋值给s1,此时s1的值为“abwdsfhkog”
常见疑问
14、谁说字符串不可变?string s = "abc";s="123",s这不是变了吗?
15、要区分变量名和变量指向的值的区别。程序中可以有很多字符串,然后由字符串变量指向他们,变量可以指向其他的字符串,但是字符串本身没有变化。字符串不可变性指的是内存中的字符串不可变,而不是变量不变。
16、string s10 = s1;//s10指向s1指向的字符串,而不是s10指向s1,哪怕s1以后指向了其他内存,那么s10还是指向"hello"