c#——字符串及字符串常用函数

 

一、字符串的不可变性

 

(1)字符(char)和字符串(string)的区别(如例1)。

  • char不可以什么都不写(不可为空),string可以什么都不写(可以为空)。
  •  1char有且只能有1个字符。
  • 1个字符串可以有1字符,可以有很多个字符组成的,也可以为(字符串的长度可大可小)。
     

例1:

  1. <span style="font-size:16px;">namespace 字符串1  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             //1个char有且只能有一个字符(不可以为空)。  
  8.             char c1='a';  
  9.             char c2='b';  
  10.   
  11.             //1个字符串可以有1个字符,可以有很多个字符组成的,还可以为空。  
  12.             string s1 = "";  
  13.             string s2 = "a";  
  14.             string s3="abcd";  
  15.         }  
  16.     }  
  17. }  
  18. </span>  

使用s.length属性来获得字符串中的字符个数。

char c=s[1]通过索引来只读指写位置的char(如例2)

例2:

  1. <span style="font-size:16px;">namespace 字符串1  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             //遍历字符串中的每一个无素  
  8.             string s = "hello";  
  9.             Console.WriteLine(s.Length);  //5, s.Length获取字符串的字符个数  
  10.             Console.WriteLine(s[1]);      //e, s[i]通过索引读取指写位置的字符char  
  11.             char c3 = s[4];               //string可以看做是char的只读数组  
  12.             Console.WriteLine(c3);        //o  
  13.   
  14.             for (int i = 0; i < s.Length; i++)  //遍历字符串s中的每一个字符(从前向后)  
  15.             {  
  16.                 char c = s[i];  
  17.                 Console.WriteLine(c);  
  18.             }  
  19.   
  20.             for (int i = s.Length - 1; i >= 0; i--) //遍历字符串s中的每一个字符(从后向前)  
  21.             {  
  22.                 Console.WriteLine(s[i]);  
  23.             }  
  24.             //s[0] = 'y';  //不能赋值(只能读,不能写)  
  25.             Console.ReadKey();  
  26.         }  
  27.     }  
  28. }  
  29. </span>  

例3:将字符串中的h替换为a

  1. <span style="font-size:16px;">namespace 字符串2  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             //将字符串中的h替换为a  
  8.             string s1 = "hello";  
  9.             char[] chars = s1.ToCharArray(); //用s.ToCharArray()方法得到字符串的char数组  
  10.             chars[0]='a';                    //对char数组进行修改  
  11.             string s2=new string(chars);     //调用new string(char[])这个构造函数来创建char数组的字符串  
  12.             Console.WriteLine(s1);   //hello,改变chars并不会改变s1,因为chars是一份拷贝(体现了字符串的一重要特性:不可变性)。  
  13.             Console.WriteLine(s2);   //aello  
  14.             Console.ReadKey();  
  15.         }  
  16.     }  
  17. }  
  18. </span>  

 

c#中字符 串有一重要的特性:不可变性,字符串一旦声明就不再可以改变。

如果要对char进行修改,那么就必须创建一个新的字符串,用s,ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数来创建char数组的字符串。

 

(2)变量名和变量指向的值的区别:

字符串不可变性指的是内存中的字符串不可变,而不是变量不变。(如例4,例5)

例4:

  1. <span style="font-size:16px;">namespace 字符串2  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             string s1 = "hello";  
  8.             Console.WriteLine(s1);  
  9.             s1 = "yello";  
  10.             Console.WriteLine(s1);  
  11.             Console.ReadKey();  
  12.         }  
  13.     }  
  14. }</span>  


例5:

  1. <span style="font-size:16px;">namespace 字符串3  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             string s1 = "hello";  
  8.             string s10 = s1;  //s10指向s1指向的字符串,而不是s10指向s1,哪怕s1以后指向了其它内存,那么s10还是指向"hello"  
  9.             char[] chars = s1.ToCharArray();   
  10.             chars[0] = 'a';                     
  11.             s1 = new string(chars);  
  12.             Console.WriteLine(s1);    //aello  
  13.             Console.WriteLine(s10);   //hello, 过河拆桥,和s1的改变没有任何的关系  
  14.             Console.ReadKey();  
  15.         }  
  16.     }  
  17. }  
  18. </span>  


二、字符串类常用函数:

 

字符串的常用函数:

ToLower():得到字符串的小写形式

ToUpper():得到字符串的大写形式         

s1.Equals(s2, StringComparison.OrdinalIgnoreCase),两字符串进行比较,忽略大小写的比较。

例6:

  1. <span style="font-size:16px;">namespace 字符串4  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             #region  将字符串"Hello"中所有字符全部转化为小写、大写  
  8.             string s1 = "Hello";  
  9.             /* 
  10.             string s2 = s1.ToLower(); 
  11.             Console.WriteLine(s1);     //Hello 
  12.             Console.WriteLine(s2);     //hello 
  13.              */  
  14.             s1 = s1.ToLower();//并不是改变了字符串的内容,而是生成一个新的全部变为小写的字符串,然后用s1指向这个新的字符串  
  15.             Console.WriteLine(s1);    //hello  
  16.             Console.WriteLine(s1.ToUpper()); //HELLO  
  17.             #endregion  
  18.  
  19.  
  20.  
  21.             #region   去掉字符串"  a  b  "两端的空格  
  22.             string s3 = "  a  b  ";  
  23.             /* 
  24.             string s4 = s3.Trim(); 
  25.             Console.WriteLine("|{0}|",s3);   //|  a  b  | 
  26.             Console.WriteLine("|{0}|",s4);   //|a  b| 
  27.              */  
  28.             s3 = s3.Trim();  
  29.             Console.WriteLine("|{0}|", s3);  //|a  b|  
  30.             #endregion  
  31.   
  32.   
  33.   
  34.             /* 
  35.             bool b = ("abc" == "ABC"); 
  36.             Console.WriteLine(b);     //False 
  37.             */  
  38.  
  39.             #region 忽略大小写的比较  
  40.             //Ignore忽略,Case大小写  
  41.             //==是区分大小写的比较,Equals("ABC", StringComparison.OrdinalIgnoreCase)是忽略大小写的比较  
  42.             bool b = "abc".Equals("ABC", StringComparison.OrdinalIgnoreCase);  
  43.             Console.WriteLine(b);  
  44.             #endregion  
  45.   
  46.             Console.ReadKey();  
  47.   
  48.         }  
  49.     }  
  50. }  
  51. </span>  

 

三、字符串的分割

 

字符串的分割 详解如上图,实例如例7

例7:

  1. <span style="font-size:16px;">namespace 字符串5  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             #region 按指定的分割符分割字符串数组  
  8.             string s1 = "aaa,bbb,ccc,ddd.hello|yes,no";  
  9.             string[] strs = s1.Split(',','.','|');  //可按多个分割符进行拆分  
  10.             foreach (string item1 in strs)  
  11.             {  
  12.                 Console.WriteLine(item1);  
  13.             }  
  14.             #endregion  
  15.  
  16.  
  17.             #region  移除空白字符串  
  18.             /* 
  19.             string s2 = "aaa,bb,cc,,12,3"; 
  20.             string[] strs2 = s2.Split(','); 
  21.             foreach (string item2 in strs2) 
  22.             { 
  23.                 Console.WriteLine(item2); 
  24.             } 
  25.             */  
  26.   
  27.             string s2 = "aaa,bb,cc,,12,3";  
  28.             string[] strs2 = s2.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);  
  29.             foreach (string item2 in strs2)  
  30.             {  
  31.                 Console.WriteLine(item2);  
  32.             }  
  33.             #endregion  
  34.  
  35.  
  36.             #region  按照1个字符串来进行分割的方法  
  37.             string s3 = "我是刘海燕我是马兆娟我是蒋倩兰";  
  38.             string[] str3 = s3.Split(new string[] { "我是" }, StringSplitOptions.RemoveEmptyEntries);  
  39.             foreach (string item3 in str3)  
  40.             {  
  41.                 Console.WriteLine(item3);  
  42.             }  
  43.             #endregion  
  44.   
  45.             Console.ReadKey();  
  46.         }  
  47.     }  
  48. }  
  49. </span>  

 

         string[] lines = System.IO.File.ReadAllLines(@"C:\root.ini", Encoding.Default);从文本文件中读取数据,返回值为string类组,每个元素为一行(如例8)。
           

 

例8:从文本文件1.txt中读取数据(1.txt的存储路径为:F:\其它文档\总结\传智博客.net培训 实例练习\1.txt)

  1. <span style="font-size:16px;">namespace 字符串5  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             //从文本文件1.txt中读取数据  
  8.             string[] lines = System.IO.File.ReadAllLines(@"F:\其它文档\总结\传智博客.net培训 实例练习\1.txt", Encoding.Default);  
  9.             foreach (string item in lines)  
  10.             {  
  11.                 Console.WriteLine(item);  
  12.             }  
  13.             Console.ReadKey();  
  14.         }  
  15.     }  
  16. }  
  17. </span>  


字符串函数

 

字符串替换:string Replace(string oldValue,string newValue)

例9:名字替换:将李时珍替换为李素丽

  1. <span style="font-size:16px;">namespace Replace函数  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             //名字替换(将李时珍替换为李素丽)  
  8.             string s = "李时珍是一个好同志,李时珍是一个好医生,向李时珍学习!";  
  9.             s = s.Replace("李时珍","李素丽");  
  10.             Console.WriteLine(s);  
  11.             Console.ReadKey();  
  12.         }  
  13.     }  
  14. }</span>  

例10:SubString函数:取子字符串

  1. <span style="font-size:16px;">namespace SubString函数  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             //SubString()1个参数的重载函数  
  8.             string s = "http://www.baidu.com";  
  9.             string 域名 = s.Substring(7);   //从指定的序号开始一直到最后的子字符串  
  10.             Console.WriteLine(域名);  
  11.   
  12.             //SubString()2个参数的重载函数  
  13.             string s1 = s.Substring(7,5);  //SubString第二个参数指的是截取多长,而不是结束位置  
  14.             Console.WriteLine(s1);  
  15.   
  16.             //string s2 = s.Substring(7, 100);  //如果Length参数超过了长度,就会报错  
  17.             //Console.WriteLine(s2);   
  18.              
  19.             Console.ReadKey();  
  20.         }  
  21.     }  
  22. }  
  23. </span>  


例11:Contains函数:判断字符串中是否含有子字符串value

  1. <span style="font-size:16px;">namespace Contains函数  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             string s = "我们的社会真和谐啊!";  
  8.             if (s.Contains("社会") || s.Contains("和谐"))  
  9.             {  
  10.                 Console.WriteLine("含有敏感词汇,请文明用语!");  
  11.             }  
  12.             Console.ReadKey();  
  13.         }  
  14.     }  
  15. }</span>  

例12:s.StartsWith  判断字符串是否以子串value开始,s.EndsWiths 判断字符串是否以子串value结束

  1. <span style="font-size:16px;">namespace StartsWith函数  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             string s = "http://www.cctv.com";  
  8.              
  9.             //s.StartsWith  判断字符串是否以子串value开始  
  10.             if (s.StartsWith("http://") || s.StartsWith("https://"))  
  11.             {  
  12.                 Console.WriteLine("是网址");  
  13.             }  
  14.             else  
  15.             {  
  16.                 Console.WriteLine("不是网址");  
  17.             }  
  18.   
  19.             //s.EndsWiths 判断字符串是否以子串value结束  
  20.             if (s.EndsWith("www.baidu.com"))  
  21.             {  
  22.                 Console.WriteLine("是百度");  
  23.             }  
  24.             else  
  25.             {  
  26.                 Console.WriteLine("不是百度");  
  27.             }  
  28.             Console.ReadKey();  
  29.         }  
  30.     }  
  31. }  
  32. </span>  

例13:IndexOf函数:取子串value第一次出现的位置,如果不存在,则返回-1。 

  1. <span style="font-size:16px;">namespace IndexOf函数  
  2. {  
  3.     class Program  
  4.     {  
  5.         static void Main(string[] args)  
  6.         {  
  7.             //IndexOf函数,取子串第一次出现的位置,如果不存在,则返回-1。  
  8.             string s = "您好,我是刘海燕";  
  9.             int i1 = s.IndexOf("我是");  //返回子字符串的第一个字符第一次出现的位置  
  10.             int i2 = s.IndexOf("你是");  //如果不存在,则返回-1  
  11.   
  12.             Console.WriteLine(i1);       //3,子串“我是”第一次出现的位置是3  
  13.             Console.WriteLine(i2);       //-1,子串不存在“你是”,返回-1  
  14.               
  15.             Console.ReadKey();  
  16.         }  
  17.     }  
  18. }  
  19. </span>  

本文转载:CSDN博客