使用StringBuilder操作字符串

来源:互联网 发布:淘宝专业术语 编辑:程序博客网 时间:2024/05/21 09:16
 大家已经习惯在复制字符串啊, 附加字符串等操作时使用 str1 += str2; 等语句乐吧, 这样做是没问题的, 然而作为一个本分的程序员, 我们应该问, 什么做法是最恰当的, 最有效率的, MicroSoft推出System.Text.StringBuilder这个对象, 绝不是吃饱乐没事干的.

    一个String字符串, 从本质上来说, 其实是一个char数组, 作为一个数组对象, 它在内存中是不可改变的, 调用str.Trim(), str.Upper(), str.Lower()方法, 其实在内存中都是在创建一个新的字符串对象, 使用str1 += str2这样的句子, 看起来是str1的长度变了, 其实在内存中是分配乐新的连续的地址空间, 产生乐一个新的str3, 长度是str1和str2的和, 然后str1的指针, 指向乐str3, 在只是对字符串进行修改的情况下, 实质却是分配乐新的对象, 这种系统开销, 尤其是在做循环的时候, 代价是很昂贵的.

    所以就有乐StringBuilder对象, 如果只是修改字符串的内容而不是要创建新字符串, 使用StringBuilder再合适没有, 尤其是那种循环附加字符串的场合里, 使用StringBuilder更是天造地设.

    StringBuilder是动态的, 从本质上说, 它其实是一个链表, 也就是说, 它的地址空间不是连续的, StringBuilder失去乐String对象的很多方法, 但是从使用上说, StringBuilder在构造字符串的优异性能, 弥补乐它的这方面的不足.

    我们可能经常这么写代码:

url = Request.ApplicationPath  // url是个String
    + "/dir1/url1.aspx?fid="
    + str1
    + "&mode="
    + str2
    ...;

    其实我们应该这么写:

urlBuilder.AppendFormat(      // urlBuilder是个StringBuilder
    "{0}//dir1/url1.aspx"
    + "?fid={1}&mode={2}...",
    Request.ApplicationPath,
    str1,
    str2,
    ...
    );
String url = urlBuilder.ToString();

    不过, 我们要是只是对字符串进行少量简单的修改操作, 还不至于用上StringBuilder对象, 毕竟一个对象要是能力更大, 也就会更复杂, 更占内存, 有时候使用StringBuilder这把牛刀来杀鸡, 不免得不偿失. 但是, 要是对字符串进行大量的修改操作, 朋友, 我还是信赖StringBuilder, 呵呵.

 
原创粉丝点击