11字符串

字符串

1)、字符串的不可变性

当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一块空间存储新值。

当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁。
图示如下:
image

所以,当多个string类型的变量的值一样时,他们在堆中其实是共用一个空间的值的。

图示如下两图:
image

image


2)、我们可以讲字符串看做是char类型的一个只读数组。

ToCharArray();将字符串转换为char数组
new string(char[] chs):能够将char数组转换为字符串

比如:

            //可以将string看作是一个char类型只读类型的数组
            string s = "abcdefg";

            //s[0] = "b";//不能这样做,因为他是只读的


            //首先将字符串转换为char类型的数组
            char[] chs = s.ToCharArray();

            //然后再修改第一个
            chs[0] = 'b';

            //最后创建一个string对象,将他给s
            s = new string(chs);

            Console.WriteLine(s);

            //也可以通过下标输出里面字符串里的某一个值
            Console.WriteLine(s[0]);

StringBuilder

当要大量操作字符串时,用字符串对象效率比直接拼接字符串效率高,用为每次拼接 字符串都是在堆中重新开一块空间,而字符串对象则是一直使用一块空间

测试string和StringBuilder的效率

////当要大量操作字符串时,用字符串对象效率比直接拼接字符串效率高,用为每次拼接  字符串都是在堆中重新开一块空间,而字符串对象则是一直使用一块空间
            StringBuilder sb = new StringBuilder();

            string str = null;

            //创建计时器对象
            Stopwatch sw = new Stopwatch();

            //调用开始计时的方法
            sw.Start();

            for (int i = 0; i < 100000; i++)
            {
                //str += i;//用时00:00:10.1407187

                sb.Append(i);//用时 00:00:00.0035004
            }

            //循环完后结束
            sw.Stop();

            //输出用时
            Console.WriteLine(sw.Elapsed);
			


字符串提供的各种方法

1)、Length:获得当前字符串中字符的个数

2)、ToUpper():将字符转换成大写形式

3)、ToLower():将字符串转换成小写形式

4)、Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比较两个字符串,可以忽略大小写

5)、Split():分割字符串,返回字符串类型的数组。

比如:

            string s = "a b  cd_ +,==e f";

            //用char类型的数组进行分割
            char[] chs = { ' ', '_', '+', '=', ',' };

            string[]str = s.Split(chs, StringSplitOptions.RemoveEmptyEntries); //StringSplitOptions.RemoveEmptyEntries移除用于替换分割后的空格
			

6)、Substring():解决字符串。在截取的时候包含要截取的那个位置。

            string str = "今天天气好晴朗,处处好风光";

            str = str.Substring(1, 2);//包括开始位,只写一个参数表示截取到最后

            Console.WriteLine(str);

7)、IndexOf():判断某个字符串在字符串中第一次出现的位置,如果没有返回-1、值类型和引用类型在内存上存储的地方不一样。

            string str = "今天天气好晴朗,处处好风光";

            int index = str.IndexOf('天', 3);//第二个参数表示起始位置,查找的时候就从起始位置开始找,没找到返回-1

            Console.WriteLine(index);

8)、LastIndexOf():判断某个字符串在字符串中最后一次出现的位置,如果没有同样返回-1

string str = "今天天气好晴朗,处处好风光";

            int index = str.LastIndexOf("天", 1);//第二个参数表示起始位置,查找的时候就从起始位置开始找,没找到返回-1

            Console.WriteLine(index);




            //LastIndexOf经常配合Substring来截取文件名
            string path = @"G:\b\c\d\e\起风了.mp3";
            string str = path.Substring(path.LastIndexOf("\\") + 1);

            Console.WriteLine(str);

9)、StartsWith():判断以....开始

            string str = "今天天气好晴朗,处处好风光";

            if (str.StartsWith("今天"))
            {
                Console.WriteLine("是的");
            }
            else
            {
                Console.WriteLine("不是的");
            }

10)、EndsWith():判断以...结束

            string str = "今天天气好晴朗,处处好风光";

            if (str.EndsWith("风光"))
            {
                Console.WriteLine("是的");
            }
            else
            {
                Console.WriteLine("不是的");
            }

11)、Replace():将字符串中某个字符串替换成一个新的字符串

            string str = "国家关键人物老赵";

            if (str.Contains("老赵"))
            {
                str = str.Replace("老赵", "**");
            }

            Console.WriteLine(str);

12)、Contains():判断某个字符串是否包含指定的字符串

13)、Trim():去掉字符串中前后的空格

14)、TrimEnd():去掉字符串中结尾的空格

15)、TrimStart():去掉字符串中前面的空格

16)、string.IsNullOrEmpty():判断一个字符串是否为空或者为null

            string str = null;
            string str = "";

            if (string.IsNullOrEmpty(str))
            {
                Console.WriteLine("是的");
            }
            else
            {
                Console.WriteLine("不是的");
            }

17)、string.Join():将数组按照指定的字符串连接,返回一个字符串。

string[] names = { "张三", "李四", "王五", "赵六" };

            string Newname = string.Join("|", "张三", "李四", "王五", "赵六" );

            Console.WriteLine(Newname);
posted @ 2021-10-04 16:31  青仙  阅读(81)  评论(0编辑  收藏  举报