很多时候我们需要用到字符串替换程序,比如插入数据库时需要将'替换成''。当只有少数待换字符串时用String.Replace性能很高,但因为其复杂度是O(n),当待换字符串很多的时候,String.Replace的性能就降下来了。前些天写了几个程序,用于批量替换字符串。

问题:批量替换字符串。定义字符串对PairString{OldValue,NewValue}。
                                OldValue<------>NewValue 
            称---->为右过滤,简称过滤。<----为左过滤,或反过滤。
            给定字符串S,一个PairString数组,用PairString数组过滤S(左、右可设置)。

程序实现:

(1)PairString

 1批量字符串替换程序    public struct PairString
 2    }


(2)采用Replace实现

 1批量字符串替换程序    public class StringFilter
 2    }

(3)批量替换。我最先采用Hashtable实现,测试结果发现性能比较低,然后就直接改用数组实现,写一个hash函数,将待换字符串hash到数组。flexIndex是松弛系数。

  1批量字符串替换程序    public class StringBatchFilter:StringFilter
  2    }

(4)例子

 1批量字符串替换程序    StringBatchFilter sk = new StringBatchFilter();
 2批量字符串替换程序
 3批量字符串替换程序    PairString[] p =
 4);

一般来说,如果待换字符串在10个以下,使用Replace性能较高。10个以上的,批量替换的优势就体现出来了。

相关文章: