打印本文 打印本文 关闭窗口 关闭窗口
C#字符串替换方法
作者:佚名  文章来源:本站原创  点击数1472  更新时间:2012/12/5 18:52:22  文章录入:mintao  责任编辑:mintao
C#字符串替换方法 字符串A,从第一个出现字符串B的位置开始,把字符串C1的内容替换为C2,把D1的内容替换为D2,而且两次替换不交叉,即各替换各的。即第一次替换完了后,A中可能会含有D1的内容,这种情况不替换为D2。如:A= “my !name is ****!”     B=“y”    C1= "!"    C2= "*"    D1= "*"    D2= "#"结果应该是"my *name is ####*"解决方法:替换单个字符的       
internal void ChangeWchar(/*string mStr,string findStr,string replace str*/)
        {
            string str="my !name is ****!";
            string C1="!",  C2="*", D1="*",  D2="#";
            string resultStr = "";
            for (int i = 0; i < str.Length; i++)
            {
                if (string.Compare(C1, str.Substring(i,1)) == 0)
                    resultStr += C2;
                else if (string.Compare(D1, str.Substring(i,1)) == 0)
                    resultStr += D2;
                else
                    resultStr += str.Substring(i,1);
            }
        }
下面是替换串的
        class FindReplaceStrStru
        {
            public int s, e;
        }
        internal void ChangeStr(/*自定义参*/)
        {
            string str = "my !name is ****!";
            string C1 = "!", C2 = "*", D1 = "*", D2 = "#";//设定优先级,若要替换的c1串中含有c2串,如:c1="12345" c2="23"
            string resultStr = "";
            //以c1优先为例子。
            //先定义一个“碎片”数组,只为了方便说明问题而定义,实际考虑效率可去掉,并改写函数
            //此段是保存不包含优先级1的字符串 - 段位置。
            List<FindReplaceStrStru> rp2list = new List<FindReplaceStrStru>();
            int sID = 0, eID = 0;
            while (true)
            {
                eID = sID;
                sID = str.IndexOf(C1, sID);
                if (sID >= 0)
                {
                    rp2list.Add(new FindReplaceStrStru());
                    rp2list[rp2list.Count - 1].s = eID == 0 ? 0 : eID + C1.Length;//此处若首次查找在0位置成功找到,可能会加一条无用的段,可在这这前加个判断是否为零,若为则不加
                    rp2list[rp2list.Count - 1].e = sID;
                    sID += C1.Length;
                    //画图你就明白了如:
                    //  |*****&&&&&****&&&*&&&&&****&&&&&|取不包含优先级1的段。
                }
                else
                    break;
            }
            //if((sID)<str.Length)
            //最后检查一下,若没有到未尾,则加上尾段。
            //到此你可以你用查找单个字符的思路,用重新连接一个字符串的方式,而不是直接替换,因为要 替换的c1长度为2,但替换后的c2可能长度为3,所以会改变长度,不可直接替换,用重新连接一个新串的方法
打印本文 打印本文 关闭窗口 关闭窗口