第一节 42字符串基础
using System; using System.Collections.Generic; using System.Linq; using System.Text; /* * 字符串的处理 */ namespace _42字符串基础 { class Program { static void Main(string[] args) { //C#中的单个字符用单引号包含就是char类型,('a'),单引号中放且只能放一个字符 //char a = 'a'; //char b = 'aaa'; 错 //单个字符也可以表示为字符中,还可以有长度为0的字符串通一气 //string a = "a"; //string b = ""; //string 可以看做是char的只读数组,char c= s[1]. 例子: 历输出string中的每个元素 /*string s1 = "afsafsfasfaf"; //c//har[] b = a.ToCharArray(); for (int i = 0; i < s1.Length; i++) { char c1 = s1[i]; Console.WriteLine("第{0}个字符为:{1}",i,c1); }*/ //C#中字符串有一个重要的特性,<<不可变性>>,字符串一旦声明就不再可以改变,所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改 /*string s1 = "Hello"; string s2 = s1; //s2直向s1所在的内存空间 //s1[0] = "h"; //这样操作是不行的 char[] chars = s1.ToCharArray(); chars[0] = 'h'; //请记住,这里并不是修改了s1的值,而是让s1重新指向了一个内存空间,而这块内存空间写的是hello s1 = new string(chars); Console.WriteLine("s1的值为:{0}",s1); Console.WriteLine("s2的值为:{0}",s2); //常风疑问: //谁说字符串不可变?string s="abc", s="123"; s这不是变了吗 string s ="abc"; s = "123"; //这里并没改abc这块内存空间,而是让s重新指向了一块内存空间 */ //要区分变量名和变量指向的值的区别,程序中可以有很多字符串,然后由字符串变量指向它们,变量可以指向其他的字符串,但是不定字符串本身没有变化,字符串不可变性指的是内存中的字符串不可变,而不是变量不变 //string类常用函数 //ToLower(); 得到字符串的小写形式 /*string s = "HELLO"; string s1 = s.ToLower(); Console.WriteLine(s1); string s2 = s.ToUpper(); Console.WriteLine(s2); //注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回 //s.ToLower()与 s = s.ToLower() //ToUpper();得到字符串的大写形式 //Trim()去掉字符串两端的空白 string s3 = " Hello "; Console.WriteLine(s3); string s4 = s3.Trim(); Console.WriteLine(s4);*/ //s1.Equals(s2,StringComparison.OrdinallgnoreCase),两个字符串进行区分大小写的比较 /*bool b = ("abc"=="ABC"); Console.WriteLine(b); //Ignore忽略, case:大小写 //==是区分大小写的比较,Equals("ABC",StringComparison.OrdinalIgnoreCase)是忽略大小写的比较 bool bb = "abc".Equals("ABC",StringComparison.OrdinalIgnoreCase); Console.WriteLine(bb); //两个字符进行比较 //如果相等返回0,如果abc大于123返回比0大的值,如果123大于abc返回负值 int i = "abc".CompareTo("123");*/ //字符串的分割 //string[] Split(params char[] separator); 将字符串按照指定的分割符分割为字符串数组 /*string names = "aa,bb,cc,dd,ee,ff"; string[] namei = names.Split(','); foreach (string name in namei) { Console.WriteLine("我的名字是:{0}",name); }*/ //string[] Split(char[] separator, StringSplitOptions options)将字符串按照指定的char分割符分割除为字符串数组(opations取RemoveEmptyEntries的时候移除结果中的宽白字符串) /*string names = "aa,bb,cc,dd,ee|ff,*ff"; string[] namei = names.Split(',','|','*'); foreach (string name in namei) { Console.WriteLine("我的名字是:{0}", name); }*/ /*string names = "aa,bb,cc,dd,ee,ff,,ss,,,ff"; //第一个参数必须是一个char组数 //string[] namei = names.Split(',', StringSplitOptions.RemoveEmptyEntries()); //去掉空的数据 string[] namei = names.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (string name in namei) { Console.WriteLine("我的名字是:{0}", name); }*/ //string[] Split(string[] separator, StringSplitOptions options)将字符串按照指定的string分割为字符串数组 /*string s = "我是刘邦我是关丽我是张飞"; string[] ss = s.Split(new string[]{"我是"}, StringSplitOptions.RemoveEmptyEntries); foreach (string _ss in ss) { Console.WriteLine("也也:{0}",_ss); }*/ //例子1: 从日期字符串("2008-08-08")中分析出年月日; //string date = "2008-08-08"; //string[] _date = date.Split('-'); //Console.WriteLine("{0}年{1}月{2}日",_date[0],_date[1],_date[2]); //例子2: 从一个记录了学生成绩的文本文档,每个学生成绩是一行,每行是用|分割的数据,用|分害的域分别是姓名,年龄成绩 //写程序取出成绩最高学生的姓名和成绩 /*string[] lines = System.IO.File.ReadAllLines(@"D:\roo.ini", Encoding.Default); int sum = 0; string name=""; foreach (string line in lines) { //Console.WriteLine(line); string[] a = line.Split('|'); int _sum = Convert.ToInt32(a[2]); if (_sum > sum) { sum = _sum; name = a[0]; } } Console.WriteLine("取高分为:{0}",sum); Console.WriteLine("名称为:{0}",name);*/ //字符串函数详解 //字符串替换: stirng Replace(stirng oldValue, stirng newValue)将字符串中的出现oldValue的地方替换为newValue, /*string names = "我是张飞"; string na = names.Replace("张飞","向铃川"); Console.WriteLine(na); //取子字符串: string Substring(int startIndex),取从位置startIndex开始一直到最后的字符串 string name2 = names.Substring(2); Console.WriteLine(name2); //string Substring(int startIndex, int lenght)取从位置startIndex开始长度为length的子字符串,如果字符串的长度不足Lenght则报错 string title = "我家北京天安门,天安门上红旗飞"; string _title = title.Substring(3,title.Length-3); Console.WriteLine(_title); //bool Contains(string value)判断字符串中是否含有子串value bool ii = title.Contains("天安门"); Console.WriteLine(ii); //bool StartsWidth(String value)判断字符串是否以子串value开始 bool tt = title.StartsWith("我家"); Console.WriteLine(tt); //bool EndsWith(string value)判断字符串是否以子串value结束 bool tt1 = title.EndsWith("aaa"); Console.WriteLine(tt1); //int IndexOf(string value); 取子串value第一次出现的位置 int index = title.IndexOf("天"); Console.WriteLine(index);*/ //字符串的处理练习 //接收用户输往返字符串,将其中的字符以与输入相反的顺序输出 /*Console.WriteLine("请输入字符串:"); string str = ""; str = Console.ReadLine(); for (int i = 0; i<str.Length; i++) { Console.WriteLine(str[i]); } for (int j = str.Length-1; j >= 0; j--) { Console.WriteLine("j等于:{0},值为:{1}",j,str[j]); }*/ //接收用户输入的一句项文,将其中的单词以反序输出 /*Console.WriteLine("请输入一句英文:"); string str = Console.ReadLine(); string[] _str = str.Split(' '); Console.WriteLine("输入的字符为:{0}",str); Console.WriteLine("转换后:"); for (int i = _str.Length - 1; i >= 0; i--) { Console.WriteLine(_str[i]); }*/ //从Email中提取出用户名和域名 /*string email = "xlc@163.com"; int i = email.IndexOf('@'); string start = email.Substring(0,i); string end = email.Substring(i+1); Console.WriteLine("用户名为:{0},域名为:{1}",start,end);*/ //读取文章标题和内容 string[] lines = System.IO.File.ReadAllLines(@"d:\1.txt", Encoding.Default); foreach (string str in lines) { //Console.WriteLine(str); string[] vstr = str.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries); string title = vstr[0]; string author = vstr[1]; if (title.Length >= 17) { title = title.Substring(0, 17); title += "......"; } Console.WriteLine("标题:{0} | 作者:{1}",title,author); } Console.ReadKey(); } } }