• 字符串


     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
    我叫小小菜,想要成为一棵大大包心菜.
  • 相关阅读:
    python ratelimit使用
    团队怎样去做技术规划
    分词语义提取工具
    今日头条推荐系统
    要选择做有价值的事情
    总结与规划
    性能使用到极限
    流量运营
    Stanford CoreNLP使用需要注意的一点
    七年总结
  • 原文地址:https://www.cnblogs.com/tobecabbage/p/3448343.html
Copyright © 2020-2023  润新知