string abc="fdjlsakjfdslk @a 23423prujfsdjlf@b 23erjdwos@c 435r43"
替换@a @b @c 为X Y Z要求
1参数个数并不规定
2参数名称不确定
3 只有@确定

解决方案 »

  1.   

    需求不明确
    1参数个数并不规定
    个数指什么,是@a这类参数在字符串中出现的个数吗2参数名称不确定
    名称又指什么,@a @e @k这样的,都是@后跟一个字母吗3 只有@确定
    那替换规则如何确定,比如@u替换为什么还是给出实际的例子,或者给出替换后的结果,说下可能出现的情况吧
      

  2.   

    //参考如下代码
    private string ReplaceParam(string AStr, Dictionary<string, string> AParams)
    {
        if (AStr == string.Empty || AStr == null || AParams == null) return AStr;
        string Result = AStr;
        
        foreach (string vKey in AParams.Keys)
            Result = Result.Replace("@" + vKey, AParams[vKey]);
        return Result;
    }private void Form1_Load(object sender, EventArgs e)
    {
        Dictionary<string, string> vParams = new Dictionary<string, string>();
        vParams.Add("a", "X");
        vParams.Add("b", "Y");
        vParams.Add("c", "Z");    string abc = "fdjlsakjfdslk @a 23423prujfsdjlf@b 23erjdwos@c 435r43";
        Text = ReplaceParam(abc, vParams);
    }
      

  3.   

    替换@a @b @c 为X Y Z
    -------------------------根据你的这个要求
    1参数个数并不规定---这句就无视掉,你出现N次和一次是一样的
    2参数名称不确定---这个显然是找茬,名称都不确定那替换什么?难道我替换成随即字母?
    3 只有@确定---这个就不说啥了
      

  4.   

    c#用 string.Format()函数或者 stringBuilder.Format()来处理
    @ 用{0} ....{n}来标示 
    例: 
       string abc="fdjlsakjfdslk {0} 23423prujfsdjlf{1} 23erjdwos{2} 435r43";
       abc = string.Format(abc,X,Y,Z);
       print abc;  //此时输出为fdjlsakjfdslk X 23423prujfsdjlfY 23erjdwosZ 435r43你研究一下format函数,他接受的是param string参数,也就是不定长string数组,可以满足你的需求
      

  5.   

    private string ReplaceSpecified(string line, string[] oldStrings, string[] newStrings)
            {
                if (oldStrings.Length == newStrings.Length)
                {
                    for (int i = 0; i < oldStrings.Length; i++)
                    {
                        string pattern = @oldStrings[i];
                        line = Regex.Replace(line, pattern, newStrings[i]);
                    }
                }            return line;
            }
    string abc = "fdjlsakjfdslk @a 23423prujfsdjlf@b 23erjdwos@c 435r43";
                abc = ReplaceSpecified(abc, new string[] { "@a", "@b", "@c" }, new string[] { "X", "Y", "Z" });
      

  6.   

    实际情况是这样string abc="fdjlsakjfdslk (@a) 23423prujfsdjlf(@b) 23erjdwos(@c) 435r43"个数不同 是指 也许只出现(@a)(@b)也许只出现1个
    根据@后面的字母替换 @a->a @b->b以此类推该如何写能满足种情况的替换句子?
    多钟情况特指 @a 到@z无规律性出现
      

  7.   

    根据@后面的字母替换 @a->a @b->b以此类推
    --------------------
    弱弱的说,理解能力差,还是不太懂这句,跟你上面的例子不一样,要你给结果你也没给按你现在的描述,那这样就可以了
    string abc="fdjlsakjfdslk (@a) 23423prujfsdjlf(@b) 23erjdwos(@c) 435r43";
    abc = abc.Replace("@","");输出:
    fdjlsakjfdslk (a) 23423prujfsdjlf(b) 23erjdwos(c) 435r43如果不是,说下你替换后的结果另外按你顶楼的说法@a,@b,@c分别对应X,Y,Z,那其它的比如@u,@p又分别对应什么,有什么规律
      

  8.   

    string abc="fdjlsakjfdslk (@a) 23423prujfsdjlf(@b) 23erjdwos(@c) 435r43"
    结果换成
    string abc="fdjlsakjfdslk (a) 23423prujfsdjlf(b) 23erjdwos(c) 435r43"但不是简单的替换@那么简单的
      

  9.   

    实际情况是这样string abc="fdjlsakjfdslk (@a) 23423prujfsdjlf(@b) 23erjdwos(@c) 435r43"个数不同 是指 也许只出现(@a)(@b)也许只出现1个
    根据@后面的字母替换 @a->a @b->b以此类推该如何写能满足种情况的替换句子?
    多钟情况特指 @a 到@z无规律性出现============我上面写的一个ReplaceSpecified应该能满足你的要求啊private string ReplaceSpecified(string line, string[] oldStrings, string[] newStrings)
            {
                if (oldStrings.Length == newStrings.Length)
                {
                    for (int i = 0; i < oldStrings.Length; i++)
                    {
                        string pattern = @oldStrings[i];
                        line = Regex.Replace(line, pattern, newStrings[i]);
                    }
                }            return line;
            }oldStrings是你要替换的, newStrings是对应的你要替换的内容, 由于它们都是string数组, 你可以自由添加多种替换情况
      

  10.   

    晕死了 说半天没人懂我意思string abc1="fdjlsakjfdslk (@a) 23423prujfsdjlf(@b) 23erjdwos(@w) 435r43"
    string abc2="fdjlsakjfdslk (@g) 23423prujfsdjlf(@h) 23erjdwos(@a) 435r43"
    string abc3="fdjlsakjfdslk (@h) 23423prujfsdjlf(@m) 23erjdwos(@b) 435r43"
    string abc4="fdjlsakjfdslk (@j) 23423prujfsdjlf(@m) 23erjdwos(@c) 435r43"
    string abc5="fdjlsakjfdslk (@r) 23423prujfsdjlf(@v) 23erjdwos(@u) 435r43"
    string abc6="fdjlsakjfdslk (@h) 23423prujfsdjlf(@v) 23erjdwos(@q) 435r43"求一方法能够实现
    string abc1="fdjlsakjfdslk (A) 23423prujfsdjlf(B) 23erjdwos(W) 435r43"
    即@后的字符大写 替换@x
    该方法能够满足1到N个@x出现的可能性再没人听懂 我也不说了
      

  11.   

    你早给结果就是了,这样using System.Text.RegularExpressions;string abc1 = "fdjlsakjfdslk (@a) 23423prujfsdjlf(@b) 23erjdwos(@w) 435r43";
    string result = Regex.Replace(abc1, @"@(\w)", new MatchEvaluator(expreplace));
    private string expreplace(Match m)
    {
         return m.Groups[1].Value.ToUpper();
    }输出:fdjlsakjfdslk (A) 23423prujfsdjlf(B) 23erjdwos(W) 435r43
      

  12.   

    晕死了 说半天没人懂我意思string abc1="fdjlsakjfdslk (@a) 23423prujfsdjlf(@b) 23erjdwos(@w) 435r43"
    string abc2="fdjlsakjfdslk (@g) 23423prujfsdjlf(@h) 23erjdwos(@a) 435r43"
    string abc3="fdjlsakjfdslk (@h) 23423prujfsdjlf(@m) 23erjdwos(@b) 435r43"
    string abc4="fdjlsakjfdslk (@j) 23423prujfsdjlf(@m) 23erjdwos(@c) 435r43"
    string abc5="fdjlsakjfdslk (@r) 23423prujfsdjlf(@v) 23erjdwos(@u) 435r43"
    string abc6="fdjlsakjfdslk (@h) 23423prujfsdjlf(@v) 23erjdwos(@q) 435r43"求一方法能够实现
    string abc1="fdjlsakjfdslk (A) 23423prujfsdjlf(B) 23erjdwos(W) 435r43"
    即@后的字符大写 替换@x
    该方法能够满足1到N个@x出现的可能性再没人听懂 我也不说了====================我也晕死了, 现在都第三次了, 用上面提到的ReplaceSpecified方法, 看来, 偶是被你直接忽视了
      

  13.   


    public string ReplaceArgs(string str,params string[] strArgs)
    {
    for(int i=0;i<strArgs.Length;i++)
    {
    str = str.Replace("@" + strArgs[i],"");
    } return str;
    }动态参数个数 后面随便你带多少个参
      

  14.   

    public string ReplaceArgs(string str,params string[] strArgs)
    {
    for(int i=0;i<strArgs.Length;i++)
    {
    str = str.Replace("@" + strArgs[i],strArgs[i].ToUpper());
    } return str;
    }