zoukankan      html  css  js  c++  java
  • StringBuilder:字符串构建

    String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。

    StringBuilder可以在实例化的时候承载一个字符串,然后在后期动态的改变字符串中的值,而不会重新创建和销毁对象。

    System.Text.StringBuilder sb = new StringBuilder("Hello");

    sb.Append(" C#");

    sb.AppendLine("www.witshare.org");

    sb.Append(DateTime.Now);

    System.Console.WriteLine(sb.ToString());

    运行的结果如图3.1.31:

    clip_image002

    图3.1.31

    对于运行的结果,我们可以了解到StringBuilder可以动态的为字符串追加信息,甚至是一行带回车信息的字符串。

    StringBuilder不但可以追加,也可以对字符串做出其他不同的处理。

    System.Text.StringBuilder sb = new StringBuilder("Hello");

    sb.Append(" C#");

    sb.Insert(0,"www.witshare.org");

    sb.Insert(sb.Length - 1, ".", 12);

    sb.Append(DateTime.Now);

    sb.Remove(0, 4);

    System.Console.WriteLine(sb.ToString());

    运行的结果如图3.1.32:

    clip_image004

    图3.1.32

    虽然 StringBuilder 的对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量,不应将它与当前 StringBuilder 对象容纳的字符串长度混淆在一起。

    以下代码描述了这个过程:

    System.Text.StringBuilder sb = new StringBuilder("Hello", 10);

    System.Console.WriteLine("StringBuilder最大长度{0}", sb.Capacity);

    sb.Append("C#");

    sb.Insert(0, "www.witshare.org");

    sb.Insert(sb.Length - 1, ".", 12);

    sb.Append(DateTime.Now);

    sb.Remove(0, 4);

    System.Console.WriteLine("StringBuilder产生的字符串的实际长度{0}", sb.ToString().Trim().Length);

    System.Console.WriteLine("StringBuilder最大长度{0}", sb.Capacity);

    运行的结果如图3.1.33:

    clip_image006

    图3.1.33

    StringBuilder各种方法中最强大的是AppendFormat方法,该方法运行以格式化的能力插入字符串,以下代码描述了如何使用这个方法:

    System.Text.StringBuilder sb = new StringBuilder("Hello", 10);

    sb.AppendFormat("{0}\n{1}\t{2}", 1 + 1, DateTime.Now, new int[] { 4, 5, 6, 7 });

    System.Console.WriteLine(sb.ToString());

    运行结果如图3.1.34:

    clip_image008

    图3.1.34

    除非你需要大量的对字符串进行插入、追加和移除,那么你确实的需要使用StringBuilder类,而StringBuilder类最强大的AppendFormat却不一定需要StringBuilder进行实现。String类的Format方法本质上和StringBuilder的AppendFormat相同,笔者更建议你使用String类的Format。

    System.Console.WriteLine(string.Format("你好,现在是{0}{1}点", DateTime.Now.Hour < 12 ? "上午" : "下午", DateTime.Now.ToShortTimeString()));

    运行的结果如图3.1.35:

    clip_image010

    图3.1.35

  • 相关阅读:
    topcoder srm 681 div1
    topcoder srm 683 div1
    topcoder srm 684 div1
    topcoder srm 715 div1
    topcoder srm 685 div1
    topcoder srm 687 div1
    topcoder srm 688 div1
    topcoder srm 689 div1
    topcoder srm 686 div1
    topcoder srm 690 div1 -3
  • 原文地址:https://www.cnblogs.com/shyleoking/p/1535504.html
Copyright © 2011-2022 走看看