下载中心┊文章中心┊软件分类┊更新软件┊推荐下载┊热门软件┊更新文章┊热门文章
 
《拓文asp.net网站内容管理系统》官方演示站。
 设为首页    
 收藏本站
 作者:黄振安
 
网站首页 开源拓文 .NET编程 网站编程 网页设计 图形图像 数据库 软件工程留言本
    站内搜索:   
您现在的位置: 拓文网络 → 文章中心 → .NET编程 → C#.NET → 批量字符串替换程序-2[正文]

热 门 文 章

相 关 文 章
  • C#常用函数和方法集汇总
  • c#中分割字符串的几种方法(sp...
  • C#调用父类的父类的方法
  • 计算俩个时间之间隔多少月
  • 批量字符串替换程序-1
  • C#中利用SharpZipLib进行文件...
  • C#快速排序类
  • c#学习体会:使用 ref 和 out ...
  • C#.NET 中的类型转换
  • 如何通过一个图片的URL得到该...
  • 批量字符串替换程序-2
     
    [作者:不详    转贴自:不详    点击数:    字体:【大 中 小】    更新时间:2006-3-16 9:58:07]

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


      1    public class StringBatchFilter:StringFilter
      2    {
      3        private int width=0;
      4        const int flexIndex = 10;
      5
      6        private object[] _rightArray;
      7        private object[] _leftArray;
      8
      9        public object[] RightArray
     10        {
     11            get
     12            {
     13                return _rightArray;
     14            }
     15            set
     16            {
     17                _rightArray = value;
     18            }
     19        }
     20
     21        public object[] LeftArray
     22        {
     23            get
     24            {
     25                return _leftArray;
     26            }
     27            set
     28            {
     29                _leftArray = value;
     30            }
     31        }
     32
     33        public StringBatchFilter()
     34        {
     35        }
     36
     37        public void Init()
     38        {
     39            width=flexIndex*FilterSet.Length;
     40            RightArray = new object[width];
     41            LeftArray = new object[width];
     42
     43            foreach (PairString p in FilterSet)
     44            {
     45                if(p.IsRightFilter==true)
     46                {
     47                    if(RightArray[p.OldValue[0]%width]==null)
     48                    {
     49                        RightArray[p.OldValue[0]%width]=new ArrayList();
     50                    }
     51                    ((ArrayList)RightArray[p.OldValue[0]%width]).Add(p);
     52
     53                }
     54
     55                if(p.IsLeftFilter==true)
     56                {
     57                    if(LeftArray[p.NewValue[0]%width]==null)
     58                    {
     59                        LeftArray[p.NewValue[0]%width]=new ArrayList();
     60                    }
     61                    else
     62                    {
     63                        ((ArrayList)LeftArray[p.NewValue[0]%width]).Add(p);
     64                    }
     65                }
     66            }
     67        }
     68
     69        public override string Filter(string input)
     70        {
     71            StringBuilder sb = new StringBuilder((int)(input.Length*1.2));
     72
     73            for (int i=0; i< input.Length; )
     74            {
     75                int m = input[i]%width;
     76                ArrayList l = (ArrayList)RightArray[m];
     77                if(l!=null)
     78                {
     79                    for(int j=0;j<l.Count;j++)
     80                    {
     81                        PairString p = (PairString)l[j];
     82                        if(((i+p.OldValue.Length)<input.Length))
     83                        {
     84                            if(input.Substring(i,p.OldValue.Length)==p.OldValue)
     85                            {
     86                                sb.Append(p.NewValue);
     87                                i+=p.OldValue.Length;
     88                                goto label;
     89                            }
     90                        }
     91                    }
     92                    sb.Append(input[i]);
     93                    i++;
     94                label:
     95                    ;
     96                }
     97                else
     98                {
     99                    sb.Append(input[i]);
    100                    i++;
    101                }
    102            }
    103            return sb.ToString();
    104        }
    105
    106        public override string AntiFilter(string input)
    107        {
    108            StringBuilder sb = new StringBuilder((int)(input.Length*1.2));
    109
    110            for (int i=0; i< input.Length; )
    111            {
    112                int m = input[i]%width;
    113                ArrayList l = (ArrayList)LeftArray[m];
    114                if(l!=null)
    115                {
    116                    for(int j=0;j<l.Count;j++)
    117                    {
    118                        PairString p = (PairString)l[j];
    119                        if(((i+p.NewValue.Length)<input.Length))
    120                        {
    121                            if(input.Substring(i,p.NewValue.Length)==p.NewValue)
    122                            {
    123                                sb.Append(p.OldValue);
    124                                i+=p.NewValue.Length;
    125                                goto label;
    126                            }
    127                        }
    128                    }
    129                    sb.Append(input[i]);
    130                    i++;
    131                label:
    132                    ;
    133                }
    134                else
    135                {
    136                    sb.Append(input[i]);
    137                    i++;
    138                }
    139            }
    140            return sb.ToString();
    141        }
    142    }

    (4)例子


     1    StringBatchFilter sk = new StringBatchFilter();
     2
     3    PairString[] p =
     4     {
     5         new PairString(Environment.NewLine,<br>),
     6         new PairString(    ,&nbsp;&nbsp;&nbsp;&nbsp;),
     7         new PairString(','',true,false)
     8     };
     9    sk.Init();
    10    sk.FilterSet = p;
    11    sk.Filter();


    页次:1/1  1篇/页  首页   上一页   下一页   尾页  合计 1 篇 Go:
     
    上一篇:批量字符串替换程序-1
    下一篇:C#中利用SharpZipLib进行文件...
    winner 打印本页 关闭窗口

         文 章 评 论
    评论人 查看该文章的评论 发表时间
       笔 名* : 0 50分 60分 70分 80分 90分 100分
    评论内容 *: (最多600字。当前字数:0)


    没有相关评论,欢迎您参与!

    - 关于本站 - 网站帮助 - 下载声明 - 友情连接 - 网站地图 -
    Copyright © 2005-2006 myTopWin.Com. All Rights Reserved . [桂ICP备06004496号]