.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 "哈哈哈哈";
        }
    }


初始化器

            //对象初始化器
            Person p = new Person() { Name = "战三", Age = 18 };
            //效果等同于下面
            Person p1 = new Person();
            p1.Name = "张三";
            p1.Age = 18;


            //数组初始化器
            int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            //效果等同于下面
            int[] nums2 = new int[9];
            nums2[0] = 1;
            ....


File操作

            //File.ReadAllLines//返回的是string数组,数组的每个元素是一行信息
            //File.ReadAllText//返回的是一个字符串,不分行
            //File.ReadAllBytes//返回的是一个字符数组,多用来读取照片等

            //File.WriteAllText//直接以文本的形式写入,会覆盖原内容,写入的是一个字符串
            //File.WriteAllLines//直接写入文本,也会覆盖原内容,写入的是一个字符串数组
            //File.WriteAllBytes//直接写入文本,也是会覆盖原内容,传入的参数是一个字节数组


FileStream操作

            string rePath = "";//读取的文件路径
            string wrPath = "";//写入的文件路径
            //创建一个读取的对象
            using (FileStream fsRead = new FileStream(rePath, FileMode.OpenOrCreate, FileAccess.Read))
            {
                //创建一个保存读取信息的字符数组
                byte[] buffer = new byte[1024 * 1024 * 5];
                //创建一个写的对象
                using (FileStream fsWrite = new FileStream(wrPath, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    //循环的读取和写入
                    while (true)
                    {
                        //开始读取
                        int r = fsRead.Read(buffer, 0, buffer.Length);
                        //如果读取到的内容为空,跳出循环读取/写入结束
                        if (r == 0)
                        {
                            break;
                        }
                        //如果读取内容不为空,则写入
                        fsWrite.Write(buffer, 0, r);
                    }
                }
            }


Path操作

            string path = @"C:\Users\Administrator\Desktop\test\1.txt";
            Console.WriteLine(Path.GetFileName(path));//获取带扩展名的文件名称
            Console.WriteLine(Path.GetFileNameWithoutExtension(path));//获取不带扩展名的文件名称
            Console.WriteLine(Path.GetDirectoryName(path));//获取文件路径
            Console.WriteLine(Path.GetFullPath(path));//获取绝对路径
            Console.WriteLine(Path.Combine(@"C:\", "1.txt"));//连接成文件路径
            Console.ReadKey();


Directory文件夹操作

            string path = @"C:\Users\Administrator\Desktop\test";
            string[] paths = Directory.GetFiles(path);//获取该路径下的所有文件
            string[] paths2 = Directory.GetDirectories(path);//获取该路径下的所有文件夹





猜你喜欢

转载自blog.csdn.net/m0_37532448/article/details/80321590