c#——字符串及字符串常用函数
一、字符串的不可变性
(1)字符(char)和字符串(string)的区别(如例1)。
-
char不可以什么都不写(不可为空),string可以什么都不写(可以为空)。
-
1个char有且只能有1个字符。
-
1个字符串可以有1个字符,可以有很多个字符组成的,也可以为空(字符串的长度可大可小)。
例1:
- <span style="font-size:16px;">namespace 字符串1
- {
- class Program
- {
- static void Main(string[] args)
- {
- //1个char有且只能有一个字符(不可以为空)。
- char c1='a';
- char c2='b';
- //1个字符串可以有1个字符,可以有很多个字符组成的,还可以为空。
- string s1 = "";
- string s2 = "a";
- string s3="abcd";
- }
- }
- }
- </span>
使用s.length属性来获得字符串中的字符个数。
char c=s[1]通过索引来只读指写位置的char(如例2)。
例2:
- <span style="font-size:16px;">namespace 字符串1
- {
- class Program
- {
- static void Main(string[] args)
- {
- //遍历字符串中的每一个无素
- string s = "hello";
- Console.WriteLine(s.Length); //5, s.Length获取字符串的字符个数
- Console.WriteLine(s[1]); //e, s[i]通过索引读取指写位置的字符char
- char c3 = s[4]; //string可以看做是char的只读数组
- Console.WriteLine(c3); //o
- for (int i = 0; i < s.Length; i++) //遍历字符串s中的每一个字符(从前向后)
- {
- char c = s[i];
- Console.WriteLine(c);
- }
- for (int i = s.Length - 1; i >= 0; i--) //遍历字符串s中的每一个字符(从后向前)
- {
- Console.WriteLine(s[i]);
- }
- //s[0] = 'y'; //不能赋值(只能读,不能写)
- Console.ReadKey();
- }
- }
- }
- </span>
例3:将字符串中的h替换为a
- <span style="font-size:16px;">namespace 字符串2
- {
- class Program
- {
- static void Main(string[] args)
- {
- //将字符串中的h替换为a
- string s1 = "hello";
- char[] chars = s1.ToCharArray(); //用s.ToCharArray()方法得到字符串的char数组
- chars[0]='a'; //对char数组进行修改
- string s2=new string(chars); //调用new string(char[])这个构造函数来创建char数组的字符串
- Console.WriteLine(s1); //hello,改变chars并不会改变s1,因为chars是一份拷贝(体现了字符串的一重要特性:不可变性)。
- Console.WriteLine(s2); //aello
- Console.ReadKey();
- }
- }
- }
- </span>
c#中字符 串有一重要的特性:不可变性,字符串一旦声明就不再可以改变。
如果要对char进行修改,那么就必须创建一个新的字符串,用s,ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数来创建char数组的字符串。
(2)变量名和变量指向的值的区别:
字符串不可变性指的是内存中的字符串不可变,而不是变量不变。(如例4,例5)
例4:
- <span style="font-size:16px;">namespace 字符串2
- {
- class Program
- {
- static void Main(string[] args)
- {
- string s1 = "hello";
- Console.WriteLine(s1);
- s1 = "yello";
- Console.WriteLine(s1);
- Console.ReadKey();
- }
- }
- }</span>
例5:
- <span style="font-size:16px;">namespace 字符串3
- {
- class Program
- {
- static void Main(string[] args)
- {
- string s1 = "hello";
- string s10 = s1; //s10指向s1指向的字符串,而不是s10指向s1,哪怕s1以后指向了其它内存,那么s10还是指向"hello"
- char[] chars = s1.ToCharArray();
- chars[0] = 'a';
- s1 = new string(chars);
- Console.WriteLine(s1); //aello
- Console.WriteLine(s10); //hello, 过河拆桥,和s1的改变没有任何的关系
- Console.ReadKey();
- }
- }
- }
- </span>
二、字符串类常用函数:
字符串的常用函数:
ToLower():得到字符串的小写形式
ToUpper():得到字符串的大写形式
s1.Equals(s2, StringComparison.OrdinalIgnoreCase),两字符串进行比较,忽略大小写的比较。
例6:
- <span style="font-size:16px;">namespace 字符串4
- {
- class Program
- {
- static void Main(string[] args)
- {
- #region 将字符串"Hello"中所有字符全部转化为小写、大写
- string s1 = "Hello";
- /*
- string s2 = s1.ToLower();
- Console.WriteLine(s1); //Hello
- Console.WriteLine(s2); //hello
- */
- s1 = s1.ToLower();//并不是改变了字符串的内容,而是生成一个新的全部变为小写的字符串,然后用s1指向这个新的字符串
- Console.WriteLine(s1); //hello
- Console.WriteLine(s1.ToUpper()); //HELLO
- #endregion
- #region 去掉字符串" a b "两端的空格
- string s3 = " a b ";
- /*
- string s4 = s3.Trim();
- Console.WriteLine("|{0}|",s3); //| a b |
- Console.WriteLine("|{0}|",s4); //|a b|
- */
- s3 = s3.Trim();
- Console.WriteLine("|{0}|", s3); //|a b|
- #endregion
- /*
- bool b = ("abc" == "ABC");
- Console.WriteLine(b); //False
- */
- #region 忽略大小写的比较
- //Ignore忽略,Case大小写
- //==是区分大小写的比较,Equals("ABC", StringComparison.OrdinalIgnoreCase)是忽略大小写的比较
- bool b = "abc".Equals("ABC", StringComparison.OrdinalIgnoreCase);
- Console.WriteLine(b);
- #endregion
- Console.ReadKey();
- }
- }
- }
- </span>
三、字符串的分割
字符串的分割 详解如上图,实例如例7
例7:
- <span style="font-size:16px;">namespace 字符串5
- {
- class Program
- {
- static void Main(string[] args)
- {
- #region 按指定的分割符分割字符串数组
- string s1 = "aaa,bbb,ccc,ddd.hello|yes,no";
- string[] strs = s1.Split(',','.','|'); //可按多个分割符进行拆分
- foreach (string item1 in strs)
- {
- Console.WriteLine(item1);
- }
- #endregion
- #region 移除空白字符串
- /*
- string s2 = "aaa,bb,cc,,12,3";
- string[] strs2 = s2.Split(',');
- foreach (string item2 in strs2)
- {
- Console.WriteLine(item2);
- }
- */
- string s2 = "aaa,bb,cc,,12,3";
- string[] strs2 = s2.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
- foreach (string item2 in strs2)
- {
- Console.WriteLine(item2);
- }
- #endregion
- #region 按照1个字符串来进行分割的方法
- string s3 = "我是刘海燕我是马兆娟我是蒋倩兰";
- string[] str3 = s3.Split(new string[] { "我是" }, StringSplitOptions.RemoveEmptyEntries);
- foreach (string item3 in str3)
- {
- Console.WriteLine(item3);
- }
- #endregion
- Console.ReadKey();
- }
- }
- }
- </span>
string[] lines = System.IO.File.ReadAllLines(@"C:\root.ini", Encoding.Default);从文本文件中读取数据,返回值为string类组,每个元素为一行(如例8)。
例8:从文本文件1.txt中读取数据(1.txt的存储路径为:F:\其它文档\总结\传智博客.net培训 实例练习\1.txt)
- <span style="font-size:16px;">namespace 字符串5
- {
- class Program
- {
- static void Main(string[] args)
- {
- //从文本文件1.txt中读取数据
- string[] lines = System.IO.File.ReadAllLines(@"F:\其它文档\总结\传智博客.net培训 实例练习\1.txt", Encoding.Default);
- foreach (string item in lines)
- {
- Console.WriteLine(item);
- }
- Console.ReadKey();
- }
- }
- }
- </span>
字符串函数
字符串替换:string Replace(string oldValue,string newValue)
例9:名字替换:将李时珍替换为李素丽
- <span style="font-size:16px;">namespace Replace函数
- {
- class Program
- {
- static void Main(string[] args)
- {
- //名字替换(将李时珍替换为李素丽)
- string s = "李时珍是一个好同志,李时珍是一个好医生,向李时珍学习!";
- s = s.Replace("李时珍","李素丽");
- Console.WriteLine(s);
- Console.ReadKey();
- }
- }
- }</span>
例10:SubString函数:取子字符串
- <span style="font-size:16px;">namespace SubString函数
- {
- class Program
- {
- static void Main(string[] args)
- {
- //SubString()1个参数的重载函数
- string s = "http://www.baidu.com";
- string 域名 = s.Substring(7); //从指定的序号开始一直到最后的子字符串
- Console.WriteLine(域名);
- //SubString()2个参数的重载函数
- string s1 = s.Substring(7,5); //SubString第二个参数指的是截取多长,而不是结束位置
- Console.WriteLine(s1);
- //string s2 = s.Substring(7, 100); //如果Length参数超过了长度,就会报错
- //Console.WriteLine(s2);
- Console.ReadKey();
- }
- }
- }
- </span>
例11:Contains函数:判断字符串中是否含有子字符串value
- <span style="font-size:16px;">namespace Contains函数
- {
- class Program
- {
- static void Main(string[] args)
- {
- string s = "我们的社会真和谐啊!";
- if (s.Contains("社会") || s.Contains("和谐"))
- {
- Console.WriteLine("含有敏感词汇,请文明用语!");
- }
- Console.ReadKey();
- }
- }
- }</span>
例12:s.StartsWith 判断字符串是否以子串value开始,s.EndsWiths 判断字符串是否以子串value结束
- <span style="font-size:16px;">namespace StartsWith函数
- {
- class Program
- {
- static void Main(string[] args)
- {
- string s = "http://www.cctv.com";
- //s.StartsWith 判断字符串是否以子串value开始
- if (s.StartsWith("http://") || s.StartsWith("https://"))
- {
- Console.WriteLine("是网址");
- }
- else
- {
- Console.WriteLine("不是网址");
- }
- //s.EndsWiths 判断字符串是否以子串value结束
- if (s.EndsWith("www.baidu.com"))
- {
- Console.WriteLine("是百度");
- }
- else
- {
- Console.WriteLine("不是百度");
- }
- Console.ReadKey();
- }
- }
- }
- </span>
例13:IndexOf函数:取子串value第一次出现的位置,如果不存在,则返回-1。
- <span style="font-size:16px;">namespace IndexOf函数
- {
- class Program
- {
- static void Main(string[] args)
- {
- //IndexOf函数,取子串第一次出现的位置,如果不存在,则返回-1。
- string s = "您好,我是刘海燕";
- int i1 = s.IndexOf("我是"); //返回子字符串的第一个字符第一次出现的位置
- int i2 = s.IndexOf("你是"); //如果不存在,则返回-1
- Console.WriteLine(i1); //3,子串“我是”第一次出现的位置是3
- Console.WriteLine(i2); //-1,子串不存在“你是”,返回-1
- Console.ReadKey();
- }
- }
- }
- </span>