• C# StringBuilder 使用


    在C#中,字符串类型是不可变的。这意味着字符串一旦创建就无法更改。例如,一个新的字符串"HelloWorld!"将占用堆上的内存空间。现在,通过将初始字符串更改"HelloWorld!“为"Hello World! I like C#” 将在内存堆上创建一个新的字符串对象,而不是在相同的内存地址处修改原始字符串。如果通过替换,追加,删除或在原始字符串中插入新字符串多次更改原始字符串,此行为将影响性能。

    为了解决此问题,C#StringBuilder在System.Text命名空间中引入。StringBuilder不在内存中创建新对象,而是动态扩展内存以容纳修改后的字符串。

    1. 创建一个StringBuilder对象

    可以StringBuilder使用new关键字并传递初始字符串来创建该类的对象。

    StringBuilder sb = new StringBuilder();

    或者

    StringBuilder sb = new StringBuilder(“Hello World!”);

    或者,还可以使用重载构造函数指定StringBuilder对象的最大容量

    StringBuilder sb = new StringBuilder(100);

    StringBuilder sb = new StringBuilder(“Hello World!”, 100);

    以上,C#在内存堆上按顺序分配最多100个空间。一旦达到指定容量,此容量将自动加倍。还可以使用capacity或length属性设置或检索 StringBuilder 对象的容量。您可以循环使用for循环来获取或设置指定索引处的字符。

    从上图可以看出,设置容量100,实际长度12,最大容量217483647.

    2. 从 StringBuilder 检索字符串

    StringBuilder不是字符串。使用ToString()方法从StringBuilder对象检索字符串。

    检索的是实际长度的字符串:

    for (int i = 0; i < sb.Length; i++)

    {

    Console.Write(sb[i]);

    }

    3. 向StringBuilder 添加/追加字符串

    使用 Append () 方法在当前 StringBuilder 对象的末尾追加字符串。如果 StringBuilder 还没有包含任何字符串,它将添加它。AppendLine ()方法在字符串的末尾附加换行符。

    sb.Append(“C#”);

    sb.AppendLine(“Python”);

    sb.AppendLine(“Java”);

    Console.WriteLine(sb.ToString());

    输出:

    Hello World!C#Python

    Java

    4.将格式化的字符串追加到StringBuilder

    使用 AppendFormat() 方法将输入字符串格式化为指定的格式,然后追加它。

    StringBuilder sb = new StringBuilder();

    sb.AppendFormat($“总价:{100:C}”);

    Console.WriteLine(sb.ToString());

    输出: 总价:¥100.00

    5. 将 String 插入StringBuilder

    使用 Insert() 方法在StringBuilder对象的指定索引处插入一个字符串。

    StringBuilder sb= new StringBuilder(“Language”);

    sb.Append(" List:\n");

    Console.WriteLine(sb.Length);

    sb.AppendLine(“C”);

    sb.AppendLine(“C#”);

    sb.AppendLine(“Java”);

    sb.Insert(15, “Python\n”);

    Console.WriteLine(sb.ToString());

    输出:

    15

    Language List:

    Python

    C

    C#

    Java

    6.在StringBuilder中删除字符串

    StringBuilder sb = new StringBuilder(“Language”);

    sb.Append(" List:\n");

    sb.AppendLine(“C#”);

    Console.WriteLine(sb.ToString());

    sb.Remove(16, 1);

    Console.WriteLine(sb.ToString());

    输出:

    Language List:

    C#

    Language List:

    C

    7.在StringBuilder中替换字符串

    使用该Replace()方法将所有指定的字符串出现替换为指定的替换字符串。

    StringBuilder sb = new StringBuilder(“Language”);

    Console.WriteLine(sb.ToString());

    sb.Replace(“Language”, “Program Language”);

    Console.WriteLine(sb.ToString());

    输出:

    Language

    Program Language

  • 相关阅读:
    【Linux-Windows】通过浏览器批量下载图像数据
    Modbus转Profinet网关在污水处理系统中连接PLC和变频器Modbus通信案例
    把ipa文件上传到App Store教程步骤
    【物联网】ROM、RAM和FLASH的区别
    云积天赫AI营销:重塑品牌营销新生态
    二、【redux】redux 完整版求和Demo
    java.lang.ClassNotFoundException: freemarker.cache.TemplateLoader
    二次规划的基础知识理论(更新中)
    Spring(存储Bean对象五大类注解,获取Bean对象三种注入方式)
    【Helm三部曲】 Helm 简介及安装
  • 原文地址:https://blog.csdn.net/flysh05/article/details/126474739