zoukankan      html  css  js  c++  java
  • C#_基础_String和StringBuilder及字符串常用方法(十五)

    第一、字符串不可变性

      1)当一个字符串重新赋值后,旧值并没有被销毁,而是重新开一块空间存放新值变量存储的新值内存地址

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

    1             string s = "张三"; //
    2             //重新赋值字符串,字符串“张三”没有销毁,又新开了一个空间复制
    3             //引用s存的地址发生改变
    4             s = "李四";

    1             //输出内存地址方法对比
    2             string s = "123";
    3             GCHandle h = GCHandle.Alloc(s, GCHandleType.WeakTrackResurrection);
    4             IntPtr addr = GCHandle.ToIntPtr(h);
    5             Console.WriteLine("ox" + addr.ToString("X"));
    6              s = "abc";
    7             GCHandle h2 = GCHandle.Alloc(s, GCHandleType.WeakTrackResurrection);
    8             IntPtr addr2 = GCHandle.ToIntPtr(h2);
    9             Console.WriteLine("ox" + addr2.ToString("X"));

    第二:相同的字符串,在堆中开辟一个空间

        例如 string s1 = “张三”;string s2 = “张三”;

         s1 s2执行堆内存中同一个内存

    通过Debug 模式下,调试 ---窗口 ---- 内存 ---- 内存1 /内存2/ 内存3 /内存4 查看变量的存放的地址

    第三、字符串可看作是char类型的字符自读数组;可以通过索引访问字符串中的元素,但是不能修改

    1             string s = "123abcd";
    2             //字符串可以看作是字符数组来获取元素
    3             char c = s[0];
    4             for (int i = 0; i < s.Length; i++)
    5             {
    6                 Console.WriteLine(s[i]);
    7             }

    第四、字符串可以转换为字符数组;字符数组也可以转换为字符串

    1             string s = "123abcd";
    2             //字符串转换为字符数组
    3             char[] ArrCh =   s.ToCharArray();
    4             //字符数组转换为字符串
    5             s =  ArrCh.ToString();

    第五、stringbuilder:作用字符串拼接,对字符串操作是同一块内存,而string需要不停的创建新空间,所以效率要比字符串效率高

     1             //对比测试string 和 StringBuilder的效率
     2             StringBuilder sb = new StringBuilder();
     3             //创建一个计时器,用来记录程序运行时间
     4             Stopwatch sw = new Stopwatch();  //alt shift F10 添加命名空间
     5             sw.Start();
     6             for (int i = 0; i < 1000000; i++)
     7             {
     8                 sb.Append(i);
     9             }
    10             sw.Stop();
    11             Console.WriteLine(sw.Elapsed); //输出当前总运行时间
    12 
    13             string str = null;
    14 
    15             //创建一个计时器,用来记录程序运行时间
    16             Stopwatch sw2 = new Stopwatch();  //alt shift F10 添加命名空间
    17             sw2.Start();
    18             for (int i = 0; i < 1000000; i++)
    19             {
    20                  str += i;
    21                
    22             }
    23             sw2.Stop();
    24             Console.WriteLine(sw2.Elapsed); //输出当前总运行时间

    第六、字符串截取

      

    1             //字符串截取 :字符截取
    2             string str = "123a1sd";
    3             string[] arrStr = str.Split('a');
    4 
    5             foreach (var item in arrStr)
    6             {
    7                 Console.WriteLine(item);
    8             }
    1             //字符串截取 :字符数组
    2             string str = "123a1sd";
    3             char[]arr = {'2','a','b'};
    4           //  string[] arrStr = str.Split(arr);//被截取的字符用空字符代替
    5              string[] arrStr = str.Split(arr,StringSplitOptions.RemoveEmptyEntries);//移除掉截取的空格

    第七、字符串常用方法

     1              string str = "123a1sd";
     2              str = str.ToUpper();//把字符串转换为大写
     3              str = str.ToLower();  //字符串转为小写
     4 
     5              bool b1 = str.Equals("abc");
     6              bool b2 = str.Equals("abc", StringComparison.OrdinalIgnoreCase); //忽略大小写
     7 
     8              bool b3 = str.StartsWith("12");//以什么开头结尾
     9              bool b4 = str.EndsWith("12");
    10 
    11              str.Trim();//移除全部的空字符
    12              str = str.TrimStart();//移除开始的空格
    13              str = str.TrimEnd();
    14 
    15              bool b5 = string.IsNullOrEmpty(str);//是否是空或null
    16              bool b6 = string.IsNullOrWhiteSpace(str);//是否是 null 空 空格 
    17 
    18             //插入
    19              string[] tang = { "孙悟空", "猪八戒", "沙和尚", "白龙马" };             
    20              // str = string.Join("厉害","素无卡","孙悟空"); //输出:  素无卡厉害孙悟空
    21              str = string.Join("厉害", "孙悟空");//输出:孙悟空 ,因为出入两个元素中间只有一个元素不会插入
    22              str = string.Join("厉害", tang); //输出:孙悟空厉害猪八戒厉害白龙马
    23              Console.WriteLine(str);
              
             int d = str.IndexOf('a'); //得到a在str中索引位置
                d = str.IndexOf('a'); //从第几开始找
  • 相关阅读:
    Httpclient请求数据(post)
    实现定位(无基本地图)
    Httpclient请求数据
    带参数路径的刷新和加载
    AsyncTask异步交互和httpurlconnection结合使用
    判断网络状态
    Android数字签名
    app加固
    定位和xml解析和gson解析加上拉加载,下拉刷新
    下载app后自动安装程序
  • 原文地址:https://www.cnblogs.com/CeasarH/p/9171982.html
Copyright © 2011-2022 走看看