zoukankan      html  css  js  c++  java
  • String和StringBuilder的区别与用法

    String:表示不可变字符串;每当在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间,而且在进行字符串连接的时候是新建一个字符串,进行连接后,最后赋值,如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源。

    StringBuilder:表示可变字符串;不用生成中间对象,拼接字符串比较多,或字符串的长度比较长时有较高的效率。StringBuilder的内存空间不够也要扩容而且翻倍,在分配空间时,不要过大,过大就会浪费浪费资源。 所以,初始化StringBuilder的时候最好根据需要设置容量,避免浪费

    String和StringBuilder使用时对占用的内存情况:

    如:

    1.string a="aa"+"bb";

    2.stringbuilder sb=new stringbuilder();

    sb.append("aa"); sb.append("bb");

    区别在于:

    1. string s = "";

    for (int i=0;i<1000;i++)   

    s+=i.ToString();

    2. StringBuilder sb = new StringBuilder(3000);//预先分配3000个字符,避免出现容量不足,新建string实例

    for (int i=0;i<1000;i++)   

    sb.Append(i.ToString());

    第一种一共出现了: ""(由s = ""产生的程序集共享的string实例) "0","1"..."999"(1000个由i.ToString产生) "0","01"..."01...998999"(1000个由+=产生) 总共2001个字符串实例

    第二种一共出现了: "0","1"..."999"(1000个由i.ToString产生) 一个stringbuilder引用的字符串,总共1001个字符串实例

    StringBuilder的方法与使用

    1.StringBuilder.Append 将信息追加到当前 StringBuilder 的结尾。

    如:

    StringBuilder Sb = new StringBuilder("ABC!");

    Sb.Append(" DEF");

    Console.WriteLine(Sb); 结果是:ABCDEF

    2.StringBuilder.AppendFormat 用带格式文本替换字符串中传递的格式说明符,而且实现了 IFormattable 接口,因此可接受格式化部分中描述的标准格式字符串并且追加到结尾

    如:格式化货币值格式类型

    int MyInt = 25;

    StringBuilder SB = new StringBuilder("Your total is ");

    SB.AppendFormat("{0:C} ", MyInt);

    Console.WriteLine(SB);结果是:Your total is $25.00

    3.StringBuilder.Insert 将字符串或对象插入到当前 StringBuilder 对象的指定索引处,索引从0开始

    如:

    StringBuilder SB = new StringBuilder("ABCDEF");

    SB.Insert(2,"HHH ");

    Console.WriteLine(SB);结果是:ABHHHCDEF

    4.StringBuilder.Remove 从当前 StringBuilder 对象中移除指定数量的字符,索引从0开始  

    如: StringBuilder SB = new StringBuilder("ABCDEF");

    SB.Remove(2,4); Console.WriteLine(SB);结果是:AB

    5.StringBuilder.Replace 替换指定索引处的指定字符。

    如: StringBuilder SB = new StringBuilder("ABCDEF");

    SB.Replace(A,H);

    Console.WriteLine(SB);结果是:HBCDEF

  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/lxjie/p/3100890.html
Copyright © 2011-2022 走看看