请把字符串A2B4C1D5E11转换成AABBBBCDDDDDEEEEEEEEEEE!c#实现.简洁的写法!

解决方案 »

  1.   

    StringBuilder sb = new StringBuilder();
    for(int index = 0; index < str.Length; index += 2)
    {
        char subStr = str[index];
        int num = Convert.ToInt32(str.Substring(index + 1, 1);
        for(int jndex = 0; jndex < num; jndex++)
        {
           sb.Append(subStr);
        }
    }
      

  2.   


        string msg = "A2B4C1D5E11";
        string ret = ConvertString(msg);    public string ConvertString(string input)
        {
            string pattern = @"\p{L}\d+";          // 或 @"[a-zA-Z]\d+"
            Regex regex = new Regex(pattern);
            List<LetterCount> list = new List<LetterCount>();
            StringBuilder builder = new StringBuilder();
            for (Match match = regex.Match(input); match.Success; match = match.NextMatch())
            {
                LetterCount let = new LetterCount(match.Value);
                builder.Append(let.ToString());
            }        return builder.ToString();
        }    public struct LetterCount
        {
            public char Letter;
            public int Count;        public LetterCount(string val)
            {
                Letter = val[0];
                Count = Convert.ToInt32(val.Substring(1));
            }        public string ToString()
            {
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < Count; i++)
                {
                    builder.Append(Letter);
                }
                return builder.ToString();
            }
        }
      

  3.   

    string rebuildStr(string _Value)
        {
            char[] _ValueList = _Value.ToCharArray();
            int flag = 0;
            int dig = 0;
            char cha = Char.MinValue;
            string finalStr = "";
            for (int i = 0; i < _ValueList.Length; i++)
            {
                if (Char.IsDigit(_ValueList[i]))
                {
                    dig = dig * 10 + int.Parse(_ValueList[i].ToString());
                    if (i + 1 < _ValueList.Length && Char.IsLetter(_ValueList[i + 1]))
                    {
                        flag = 1;
                    }
                    else if (i + 1 == _ValueList.Length)
                    {
                        flag = 1;
                    }
                }
                else
                {
                    cha = _ValueList[i];
                }
                if (flag == 1)
                {
                    finalStr += new string(cha, dig);
                    flag = 0;
                    dig = 0;
                    cha = Char.MinValue;
                }
            }
            return finalStr;
        }
      

  4.   

    static void Main(string[] args)
    {
    string sInput, sRegex;
    sInput = "A3B4E11";
    // A very simple regular expression.
    sRegex = "[a-zA-Z]{1}[1-9]?[0-9]*";
    Regex r = new Regex(sRegex);
    MyClass c = new MyClass();.
    MatchEvaluator myEvaluator = new MatchEvaluator(c.ReplaceCC);
    Console.WriteLine(sInput);
    sInput = r.Replace(sInput, myEvaluator);
    Console.WriteLine(sInput);
    }
        
    public string ReplaceCC(Match m)
    {
    string strTemp = m.ToString();
    string ostr = strTemp[0].ToString();
    string strnewTemp = "[" + strTemp[0] + "]{"+strTemp.Substring(1,strTemp.Length-1)+"}";
    Regex or = new Regex(strnewTemp);
    while(!or.IsMatch(ostr))
    {
    ostr+=strTemp[0].ToString();
    Console.WriteLine(ostr);
    }
    return ostr;
    }
      

  5.   

    string s = "A2B4C1D5E11";
                char[] charry = s.ToCharArray();
                char p = '0';
                int num =0;
                StringBuilder b = new StringBuilder();            foreach (char c in charry)
                {
                    if (Char.IsLetter(c))
                    {
                        if (num == 0)
                        {
                            p = c;
                        }
                        else
                        {
                            string ss = new string(p, num);
                            b.Append(ss);
                            num = 0;
                            p = c;
            
                        }
                    }
                    else
                        if (Char.IsDigit(c))
                        {
                            if (num != 0)
                            {
                                int l = num.ToString().Length;
                                string s1 = "1";
                                string s2 = new string('0', l);
                                s2 = s1 + s2;
                                num = num + (int)Char.GetNumericValue(c) * Convert.ToInt32(s2);
                            }
                            else
                            {
                                num = (int)Char.GetNumericValue(c);
                            }
                        }
                }
                if (num != 0)
                {
                    string ss = new string(p, num);
                    b.Append(ss);
     
                }
                MessageBox.Show(b.ToString());
      

  6.   

    学习了不少:
    (1) new string(char c, int count)
    (2) MatchEvaluator 委托重写代码如下:
            string msg = "A2B4C1D5E11";
            string ret = ConvertString(msg);        public string ConvertString(string input)
            {
                string pattern = @"\p{L}\d+";          // 或 @"[a-zA-Z]\d+"
                Regex regex = new Regex(pattern);
                MatchHandler handler = new MatchHandler();
                MatchEvaluator evaluator = new MatchEvaluator(handler.Replace);            return regex.Replace(input, evaluator);
            }        public class MatchHandler
            {
                public string Replace(Match match)
                {
                    char letter = match.Value[0];
                    int count = Convert.ToInt32(match.Value.Substring(1));                return new string(letter, count);
                }
            }
      

  7.   


    using System.Text.RegularExpressions;
                string str = "A2B4C1D5E11";
                StringBuilder sb = new StringBuilder();
                foreach (Match m in Regex.Matches(str, @"([a-zA-Z])(\d+)"))
                    sb.Append(new string(m.Groups[1].Value[0], int.Parse(m.Groups[2].Value)));
                string result = sb.ToString();
      

  8.   

                string s1 = "A2B4C1D5E11";
                string s2 = "";
                MatchCollection mc = Regex.Matches(s1, @"[A-Z]\d+");
                foreach (Match match in mc) s2 = s2.PadRight(s2.Length + int.Parse(match.Value.Substring(1)), match.Value[0]);
                Console.WriteLine(s2);
      

  9.   

    一句话搞定            string str = Regex.Replace("A2B4C1D5E11", @"(\w)(\d+)", delegate
                    (Match m)
                    {
                        return new string(m.Groups[1].Value[0], Convert.ToInt32(m.Groups[2].Value));
                    });