zoukankan      html  css  js  c++  java
  • 【经典】如何高效地使用string

    虽然是比较旧的文章了,但还是很有实际作用,在此贴出,以供参考,呵呵~

    下面简单介绍一些高效地使用string的一些小的建议:

    1. 尽量使用字符串(literal string)相加来代替字符串变量和字符创相加,因为这样可以使用现有的string操作指令进行操作和利用字符串驻留。

    比如:

    string s = "abc" + "def";

    优于

    string s = "abc";
    = s + "def";

    2. 在需要的时候使用StringBuilder对string作频繁的操作:

    由于string的恒定性,在我们对一个string进行某些操作的时候,比如调用ToUpper()或者ToLower()把某个string每个字符转化成大写或者小写;调用SubString()取子串;会创建一个新的string,有时候会创建一些新的临时string。这样的操作会增加内存的压力。所有在对string作频繁操作的情况下,我们会考虑使用StringBuilder来高效地操作string。StringBuilder之所以能对string操作带来更好的performance,是因为在它的内部维护一个字符数组,而不是一个string来避免string操作带来的新的string的创建。

    StringBuilder是一个很好的字符累加器,我们应该充分地利用这一个功能:

    StringBuilder sb = new StringBuilder();
    sb.Append(str1 
    + str2);

    最好写成

    StringBuilder sb = new StringBuilder();
    sb.Append(str1);
    sb.Append(str2);

    避免创建一个新的临时string来保存str1 + str2。

    再比如下面的Code

    StringBuilder sb = new StringBuilder();
    sb.Append(WorkOnString1());
    sb.Append(WorkOnString2());
    sb.Append(WorkOnString3());

    最好写好吧WorkOnString1,WorkOnString2,WorkOnString3定义成:

    WorkOnString1(StringBuilder sb)
    WorkOnString2(StringBuilder sb)
    WorkOnString3(StringBuilder sb)

    3. 高效地进行string的比较操作

    我们知道,对象之间的比较有比较Value和比较Reference之说。一般地对Reference进行比较的速度最快。对于string,在字符串驻留的前提下,我们可以把对Value的比较用Reference的比较来代替从而会的Performance的提升。

    此外,对于忽略大小写的比较,我们最好使用string的static方法Compare(string strA, string strB, bool ignoreCase)。也就是说:

    if(str1.ToLower()==str2.ToLower())

    最好写成

    If(String. Compare(str1,str2,true) == 0)


    (* 对于要忽略大小写的字符串对比,也可使用str1.Equals(str2, StringComparision.OrdinalIgnoreCase)这种写法。

    引用:静态的String.Compare方法.这个方法有个优势就是它能处理空字符串引用,忽略字符串大小写.也可以在特定文化背景下使用。由于字符串引用可能是空的,所以在比较字符串时,应该避免使用"=="或者成员比较函数
     

  • 相关阅读:
    POJ 2240 Arbitrage spfa 判正环
    POJ 3259 Wormholes spfa 判负环
    POJ1680 Currency Exchange SPFA判正环
    HDU5649 DZY Loves Sorting 线段树
    HDU 5648 DZY Loves Math 暴力打表
    HDU5647 DZY Loves Connecting 树形DP
    CDOJ 1071 秋实大哥下棋 线段树
    HDU5046 Airport dancing links 重复覆盖+二分
    HDU 3335 Divisibility dancing links 重复覆盖
    FZU1686 神龙的难题 dancing links 重复覆盖
  • 原文地址:https://www.cnblogs.com/glife/p/1633307.html
Copyright © 2011-2022 走看看