笔记6 字符串、单例

char(赋值用单引号)

单独字符

            //char代表单独的字符类型    
            char c = 'i';      //赋值用单引号

字符串(麻烦)

char[] ar = { 'h', 'e', 'l', 'l', 'o' };

由于用char写字符串太麻烦,于是出现一个新类型来处理字符串——string。

string字符串(赋值用双引号)

所有的对象怎么创建的?都是“new 类();”这样创建的。
只有字符串相当于比较特殊的类。“hello”相当于new了一个对象。

string str = "hello";      
//string它本身也是个类。所以写出“hello”,也相当于创建了一个字符串的对象。           

把string类型转成字符数组类型:

            char[] cs = str.ToCharArray();   
            //等号右边:对象的名字.方法的名字。表示调用这个对象的这个方法。
            
            Console.WriteLine(cs[1]);     //输出字符数组里的第二个字符。

因为可以直接提取string里的字符,所以一般不用转成字符数组。

            Console.WriteLine(str[1]);     //输出字符数组里的第二个字符。

长度(最常用)

            Console.WriteLine(str.Length);    //显示数组长度。此处Length是属性。

截取(Substring两种方式)

方式一:从某处开始截取,直到最后

           //从第3个字符开始截取
            Console.WriteLine(str.Substring(2));  

//结果为“hello”里的llo      

方式二:从某处开始截取,且要求截取几个字符

          //第一个2代表:从第3个字符开始。第二个2代表:截取2个字符长度。
            Console.WriteLine(str.Substring(2,2));

//结果为“hello”里的ll            

搜索(3种方式)

搜索字符串里是否有“l”?

方式一:从头开始搜索

  //从头搜索字符串,返回位置信息。查找不到返回负数。返回正数第一个l的位置
            int index = str.IndexOf("l");    
           
            Console.WriteLine(index);    
//因为是hello里正数第一个l,所以结果为2。       

方式二:从尾部开始搜索

 //从尾部搜索字符串,返回位置信息。查找不到返回负数。返回倒数第一个l的位置
            index = str.LastIndexOf("l");   
            Console.WriteLine(); 
//因为是hello里到数第一个l,所以结果为1。        

方式三:只搜索字符串的包含关系(只要有即可)

 //搜索字符串包含关系。即不需要返回值
            bool res = str.Contains("l");
            
            Console.WriteLine(res);    //打印结果Ture or False

英文字母大小写转换

注意:写在WriteLine()括号里的方法,通常不会改变原本的值,它相当于重新开辟一块内存。

转成小写

           string str = "Hello CSharp";

           Console.WriteLine(str.ToLower());   //转成小写,输出

转成大写

           Console.WriteLine(str.ToUpper());   //转成大写,输出

删除

删除头尾多余的空格 (很常用)

无论多少个空格,只要在两头,都可以去除。

            string str = "  小李飞刀 ";     //此时字符串的头尾有多余的空格
            Console.WriteLine(str);

            //删除头尾的空格
            Console.WriteLine(str.Trim());

删除头尾指定字符

方式一:Trim
           //删除头尾的指定字符
            Console.WriteLine(str.Trim('_'));
            //删除头部的指定字符
            Console.WriteLine(str.TrimStart('_'));
            //删除尾部的指定字符
            Console.WriteLine(str.TrimEnd('_'));
方式二:Remove
           //删除从索引3开始的全部字符
            Console.WriteLine(str.Remove(3));
           //删除从索引3开始的2个字符的长度
            Console.WriteLine(str.Remove(3,2));

删除空格与删除指定字符的区别

在这里插入图片描述

插入(在第几索引的前面添加)

            string str = "_小李飞刀_";
            //插入(在第几索引的前面添加)。此处目的是变成"_小李_飞刀_"
            Console.WriteLine(str.Insert(3,"_")) ;     
            //字符用单引号,此处是双引号,代表此处可以插入字符串

分割(非常非常常用)

在这里插入图片描述

            string str = "_小_李_飞_刀_";
           
            //分割字符串(特别特别常用)
            string[] strs = str.Split('_');     //分割成名叫strs的数组了
            Console.WriteLine(strs[3]);
//结果:飞。第0索引是空,第1索引是小,第2索引是李,第3索引是飞,第4索引是刀,并且还有第5索引——空。

拼接

方式一:Concat
            //把数组字符串拼接起来
            Console.WriteLine(string.Concat(strs));
方式二:加号
Console.WriteLine("小"+"李");
方式三:使用字符串构造器去创建字符串

字符串构造器,算是一个新的类,这个类叫做StringBuilder。
它拼接字符不是使用加号,而是通过Append这个方法。

            StringBuilder sb = new StringBuilder();
            sb.Append("今天,");    //拼的第一个。这个方法可以无数次用
            sb.Append("天气");
            sb.Append("不错!");
            //拼完之后想把它打印成普通的字符串,要使用ToString这个方法就可以将上面的方法转成字符串。
            Console.WriteLine(sb.ToString());     
方式四:Join(用自定义字符拼接)
 //把数组字符串用自定义字符拼接。此处用波浪线拼接
            Console.WriteLine(string.Join("~",strs));

在这里插入图片描述

替换(可用于屏蔽关键字)

            //替换字符   把_替换成*
            Console.WriteLine(str.Replace('_','*'));

这个方法支持t替换成字符串,所以用双引号即可

            string str = "   小_ 李_    飞_ 刀_";
            //替换字符   把空格替换成无
            Console.WriteLine(str.Replace(" ","")); 

格式化

格式化字符
            //格式化字符串
            str = string.Format("1+1=2");
//注意此处Format方法不是str(对象名)调用,而是string(类名)来调用的,说明Format方法是个静态的。
            Console.WriteLine(str);
//结果:1+1=2
优点:占位符

大括号里的是占位符,占位符有几位,后面的参数就要写几位。

 str = string.Format("{0}+{1}={2}",1,1,2);
 //结果:1+1=2 
str = string.Format("{0}+{1}={2}",1,1,1+1);
//结果:1+1=2。 

便于计算大数据

            int a = 36000;
            int b = 44000;
            str = string.Format("{0}+{1}={2}",a,b,a+b);
//注意此处Format方法不是str(对象名)调用,而是string(类名)来调用的,说明Format方法是个静态的。
            Console.WriteLine(str); 
//结果:36000+44000=80000
格式化日期

对占位符有要求的话,加冒号。
日期的格式是yyyyMMdd(年月日),他们之间的分隔符随意,此处用的杠和冒号。

            str = string.Format("{0:yyyy-MM-dd hh:mm:ss}",DateTime.Now);
            /*此处只有0一个占位符,我们给它当前的日期。
              DateTime(类名).Now(方法)说明是个静态的。它的含义是返回当前的日期。
              但这个时间只有格式化成我们规定的样式,我们才能看懂。*/
            Console.WriteLine(str); 
 //结果:2019-06-08 09:57:56

单例类

内部

单例
正常情况下,一个类可以实例化出多个对象。单例:一个类只能实例化出一个对象。
管理类:稚嫩有一个对象存在,会用到单例比较多。
员工:小王、小李
老板:副总
声音播放器:播放音乐的,播放音效的,播放环境音的
声音管理器

    //写成单例类
    public class PersonManager  
     //上面有一个类叫Person,这里写个类用于管理Porson。
    {
        private static PersonManager instance;
  //private(私有的)static(静态)person(类的名字)instance(翻译为:实例)
        //想访问私有的,便要写一个同名(首字母大写)的属性了。
        public static PersonManager Instance     
        {
            /*属性里原本有Set和Get。其实是可以二选一的。
             如果只有Set,说明只能赋值,不能取出来。
             如果只是Get,说明只能取出来,不能赋值。单例的话,一般只写Get。*/
            get
            {
                //做一个判断:如果变量默认是空
                if(instance == null)
                {
                    instance = new PersonManager();   //实例化了一个管理类
                }
                return instance;    //返回
            }
        }

        public Person[] persons;     
        //通过一个属性:person类型的数组,叫persons。

    }

外围

         //外界调用时
          PersonManager.Instance.persons;
            // PersonManager.Instance;
/*第二次调用时,因为已经有第一次的返回值了,所以输入的不是空,导致直接返回。
            所以无论调用多少次,都是第一次产生的那个对象*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值