字符串

 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
           
        }    
    }
View Code
  • 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
        }
    }
View Code
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:WindowsSystem32Myfile1.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();
        }
    }
View Code

字符串的分割过程图解:

   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();
        }
    }
View Code
    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);
            }
        }
View Code
 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();
        }
    }
View Code
我叫小小菜,想要成为一棵大大包心菜.
原文地址:https://www.cnblogs.com/tobecabbage/p/3448343.html