字符串
string可以看做是char数组的只读数组.char c=s[]1.
- c#中字符串有一个重要的特征:不可变性,字符串一旦声明就不再可以改变.所以只能通过索引来读取指定位置的char,不能对指定位置的char做改变.
- 如果要对char进行修改,那么必须创建一个新的字符串,用s.ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数来创建char数组的字符串.一旦字符串被创建,那么char数组的修改也不会造成字符串的变化.
代码:
class Program { static void Main(string[] args) { #region 引子 string str = "我是一个字符串";//定义字符串 char[] chs = new char[] { '我', '是', '一', '个', '字', '符', '串' }; string str1 = new string(chs);//定义字符串 Console.WriteLine("str{0}:,str1:{1}", str, str1); //字符串其实就是一串字符,既然是以串字符,我们就希望可以一个一个去访问. //数组访问的方式? 数组名[编号] // 访问第二个字符 str1[1] Console.WriteLine("str里的第二个字符:",str[1]); //修改字符串里的'是'变成'为' chs[1] = '为'; //将'是'改成'为' Console.WriteLine("str1:{0}", str1); // 而 str[1] = '为';错误,因为string类型是只读的 str += "1234"; //此时并没有改变字符串,而是重新生成了新的字符串 Console.WriteLine("str:{0}",str); #endregion #region 修改字符串 //如何间接的修改字符串里的字符; string str2 = "我是一个字符串"; char[] chs1= str2.ToCharArray(); chs1[1] = '为'; Console.WriteLine(chs1.ToString());//并没有得到我们想要的字符 //变量分为基本类型和构造类型 //构造类型ToString()的时候,打印的是其类型名 // 那么如何得到想要的字符了呢?请听下回讲解(多态) str2 = new string(chs1); Console.WriteLine(str2); Console.ReadKey(); #endregion } }
- string对象的内存分配方式
见图:
- 字符串的常见方法:
class Program { static void Main(string[] args) { //练习1:随机输入你心中想到的一个名字,然后输出它的长度 //length:可以得到字符串的长度 Console.WriteLine("输入您想到的一个名字"); string str = Console.ReadLine(); Console.WriteLine("名字长度为{0}", str.Length); //练习2:两个学员输入各自喜欢的课程,判断是否一致, //如果相等,则输出他们俩喜欢相同的课程,否则输出各自喜欢的课程 Console.WriteLine("请输入他喜欢什么课程"); string loveCourseA = Console.ReadLine(); Console.WriteLine("请输入她喜欢的课程"); string loveCourseB = Console.ReadLine(); //将字符串的字符全部转成大写的(转小写为ToLower) loveCourseA = loveCourseA.ToUpper();//注意:此次,调用string.ToUpper()方法会返回一个string对象 loveCourseB = loveCourseB.ToUpper(); if (loveCourseA==loveCourseB) { Console.WriteLine("好巧哟,他们喜欢同一个课程"); } else { Console.WriteLine("他喜欢{0},而她喜欢{1}", loveCourseA, loveCourseB); } //拓展:将abcd转成aBCd; string lowerC = "abcd"; char[] chs = lowerC.ToCharArray(); for (int i = 0; i < chs.Length;i++ ) { if (i>0 && i<chs.Length-1) { chs[i]=char.ToUpper(chs[i]); } } lowerC=new string(chs); Console.WriteLine("转换后为{0}",lowerC); //移除首尾指定字符 //trim方法 string str1 = " abcd ";//包含空字符; Console.WriteLine("str1的长度为:{0}",str1.Length); str1=str1.Trim();//去掉首尾空格; Console.WriteLine("str1.trim()生成的字符串对象长度为:{0}", str1.Length); string str2 = " abcd "; str2 = str2.TrimStart(); //去掉首空格 str2 = str2.TrimEnd();//去掉尾空格 string str3 = "abcfcbedcbaabcfcba"; str3 = str3.Trim('a', 'b', 'c');//去掉首尾的'a','b','c'字符,分别从字符串首位与尾位查找,碰到'a','b','c'就将其删掉,直到碰到第一个不是这三个字符的其中之一的字符停止查找. Console.WriteLine("str3.Trim()生成的字符串对象为{0}",str3); Console.ReadKey(); //比较方法 左边第一个参数大于第二个参数,返回1,否则返回-1 string txt = "1.天黑黑"; string txt1 = "2.天黑黑"; string txt2 = "10.天黑黑"; int res = string.Compare(txt, txt1); //-1 int res1 = string.Compare(txt1, txt2);//1 int res2 = string.Compare(txt2, txt);//1 //string在进行比较时是依据字典排序法,或叫做culture排序法 //注: int string.Compare(string str1,string str2,bool ingnorecase)表示是否区分大小写 这里ture表示不区分,默认为false //Equal()方法 string course1= "c#"; string course2 = "C#"; bool b1 = course1.Equals(course2);//结果为false bool b2 = course1.Equals(course2,StringComparison.OrdinalIgnoreCase);//结果为true } }
static void Main(string[] args) { //字符串的合并方法string.Join() #region 引子 /* string[] strs = new string[] { "梅西", "卡卡", "郑大世" }; string str = ""; for (int i = 0; i < strs.Length - 1;i++ ) { str += strs[i] + "|"; } str += strs[strs.Length-1]; Console.WriteLine(str);*/ #endregion string[] strs = new string[] { "梅西", "卡卡", "郑大世" }; string str1 = string.Join("|", strs); string str2 = string.Join("", strs); Console.WriteLine("str1为{0},str2为{1}",str1,str2); //字符串的分割 string path=@"C:\Windows\System32\Myfile\1.avi"; //分析出该文件的文件名和各个文件夹 //1.avi在Myfile文件夹中,Myfile文件夹在System32文件夹中,System32文件在Windows文件夹中... // Split方法 string[] strs1=path.Split('\\'); Console.WriteLine("{4}在{3}中,{3}在{2}中,{2}在{1}中,{1}在{0}中", strs1[0], strs1[1], strs1[2], strs1[3], strs1[4]); //I have a dream ! ! ! what about you ?分析这句话有哪些单词 string sentence = "I have a dream ! ! ! what about you ?"; // string[] sentences=sentence.Split(' ','!','?'); string[] sentences = sentence.Split(new char[] { ' ', '!', '?' }, StringSplitOptions.RemoveEmptyEntries);//移除空格 Console.WriteLine(sentences.Length); //如果有一个字符串将该字符串的空格全部去掉 string captionS = "a b c c e f g hc g"; // string[] captionSS = captionS.Split(' '); string[] captionSS = captionS.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); string reStr = string.Join("",captionSS); Console.WriteLine("经过去掉空格的字符串captionS{0}变为:{1}", captionS, reStr); Console.ReadKey(); } }
字符串的分割过程图解:
class Program { static void Main(string[] args) { //Contains string str = "睡觉了吧"; if (str.Contains("睡觉")) { Console.WriteLine("yes"); } else { Console.WriteLine("听不懂"); } //IndexOf方法 SubString()方法 string email= "547916475@qq.com"; int number = email.IndexOf("@"); string user = email.Substring(0, number); string field = email.Substring(number+1); Console.WriteLine("用户名为:{0}域名为:{1}",user,field); //SubString(开始的位置,[截取字符串长度]) //当有两个参数的时候,从编号开始截取;截取长度为指定长度 // 如果字符串长度还不及截取长度,就会报出异常 // 当只使用第一个参数的时候,那么就从指定的位置开始,截取后面所以的内容 string strI = "dff@dff@cfdfff@@cv";//找出所有@的位置 int num1=strI.IndexOf("@",0);//从第0位开始找 int num2=strI.IndexOf("@",num1+1);//从num+1位开始找 int num3=strI.IndexOf("@",num2+1); int num4 = strI.IndexOf("@", num3 + 1); int num5 = strI.IndexOf("@", num4 + 1);//当找的结果为负数时,表示已经找完. //IndexOfAny() string strC = "abcdabcdab"; int position = -1; do { position = strC.IndexOfAny(new char[] { 'b', 'd' }, position + 1); if (position!=-1) { Console.WriteLine("位置为{0}", position); } } while (position!=-1); Console.ReadKey(); } }
class Program { static void Main(string[] args) { //走马灯 string str = "我是一个走马灯了灯"; while (true) { Console.Clear(); str = str.Substring(1, str.Length - 1) + str[0]; Console.WriteLine(str); System.Threading.Thread.Sleep(400); } }
class Program { static void Main(string[] args) { //字符串的插入删除和替换 string str1 = "一二三四五六七"; string inser = "我是一个插入的字符串"; str1 = str1.Insert(1, inser);//调试结果str1="一我是一个插入的字符串二三四五六七" str1 = str1.Remove(1, inser.Length);//调试结果 str1="一二三四五六七"; string date = "2013年11月29日"; date=date.Replace("年", "-").Replace("月", "-").Replace("日", ""); Console.WriteLine(date); //判断结束和开始<stringName>.StartWith Endwith string songName = "孙燕姿-天黑黑.mp3"; if (songName.EndsWith("mp3")) { Console.WriteLine("播放正常"); } if (songName.StartsWith("孙燕姿")) { Console.WriteLine("这首歌是燕姿的"); } //string.Format()方法 string combStr = string.Format("{0}{1}{2}", "字符串", 123, 'h'); Console.WriteLine(combStr); Console.ReadKey(); } }
我叫小小菜,想要成为一棵大大包心菜.