.NET基础-21-字符串的特性和一些操作

字符串的不可变性
            //创建一个string类型的对象
            //因为是引用类型,所以会在堆中开辟一个空间,用来存储内容“123”,他的地址为p1
            //并且在栈中开辟一个空间,名称为str1,他存储的内容为p1
            //string str1 = "123";
            //当再次重新赋值为“456”,的时候
            //原先堆中存放“123”的空间不变,会重新开辟一段新的空间用来存储“456”,这个新空间的地址为p2
            //然后栈中的空间str1存储的内容变为新空间的地址p2
            //堆中的空间p1会在之后被垃圾回收机制给释放掉
            //因为每次重新赋值都会重新开辟空间,所以如果重复大量的赋值会占用大量的内存
            //str1 = "456";

字符串的暂存池特性
            //如下面两个string对象
            //在即使窗口个中可以看到,栈中的地址不同,但是堆中的地址是相同的
            //在创建对象s1的时候会先在堆里检测,如果有123,则直接指向该空间,如果没有则重新开辟一个空间
            //string s1 = "123";
            //string s2 = "123";

 

字符串可以看做一个只读的字符数组,通过下标可以去到其中的字符
            //string s = "abcde";
            //char c = s[1];//取到b这个字符
            //s[2] = 'a';//应为是只读的,所以如果想要通过这种方式赋值会报错

 

字符串和字符数组之间的转换
            //string s = "abcdefg";
            //char[] chs = s.ToCharArray();//转换成字符数组
            //s = new string(chs);//把字符数组转换成字符串重新赋值给对象s

 

使用方法IsNullOrEmpty判断是否为空或者为null
            //string s = null;
            //if (string.IsNullOrEmpty(s))
            //{
            //    Console.WriteLine("空");
            //}
            //else
            //{
            //    Console.WriteLine("不空");
            //}

 

Equals判断两个字符串是否相同
            //Equals默认判断的是两个对象的地址,如果地址相同则返回true,如果不相同则返回false
            //string s1 = "abc";
            //string s2 = "aBC";
            //不忽略大小写的判断
            //if (s1.Equals(s2,))
            //忽略大小写
            //if (s1.Equals(s2,StringComparison.OrdinalIgnoreCase))
            //{
            //    Console.WriteLine("相同");
            //}
            //else
            //{
            //    Console.WriteLine("不同");
            //}
            //Console.ReadKey();

 

使用IndexOf获取某个字符串出现的位置,返回的为对应的下标
            //string s = "我爱北京爱天安门";
            //int index = s.IndexOf("爱");//判断[爱]出现的第一个位置
            //int index2 = s.IndexOf("爱", 2);//从下标为2的字符开始判断[爱]出现的位置
            //int index3 = s.LastIndexOf("老");//判断[老]最后一次出现的位置

 

使用Substring方法截取字符串,返回结果为一个新的字符串
            //string s = "abcdefg";
            //s = s.Substring(1,4);//从下标为1的开始截取,截取4个字符,返回结果为[bcde]

 

使用split方法,把字符串能转换成数组
            //string s = "a   ,   -- b";
            //string[] newS = s.Split(new char[] { ' ', '-', ',' });//转换成数组,并且把符合调价的字符,转换成空
            //string[] newS = s.Split(new char[] { ' ', '-', ',' }, StringSplitOptions.RemoveEmptyEntries);//把转换的空给去掉

 

把指定的字符插入到一个数组之间,并且返回一个组装的字符串
            //string[] names = { "张三", "李四", "王五", "赵六" };
            //string s = string.Join("|",names);//转换之后返回结果为[张三|李四|王五|赵六]
            //string s = string.Join("|",1,3.14,true,'c',5000m,"张三");//可以把任何类型的数据放进去,这里比较随意

 

            //把所有的[--]替换成一个[-],输出结果为[1-2-3-4]
            //string s = "1-----------2---------3-----------4--";
            //string[] strNew = s.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
            //s = string.Join("-", strNew);

 

public class Person
    {
        public string Name
        {
            get;
            set;
        }

        public int Age
        {
            get;
            set;
        }

        /// <summary>
        /// 重写Equals方法,
        /// 用来比较Name与Age是否相同
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object obj)
        {
            Person p = obj as Person;
            if (this.Name == p.Name && this.Age == p.Age)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 重写ToString方法
        /// 输出哈哈哈
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return "哈哈哈哈";
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值