有个字符串为"2|BB|BB_BB|1|A|A_A|3|CCC|CCC_CCC|5|EEEEE|EEEEE_EEEEE|4|DDDD|DDDD_DDDD",最终打印出的结果为:  1  A  A_A
  2  BB BB_BB
  3  CCC CCC_CCC
  4  DDDD DDDD_DDDD
  5  EEEEE EEEEE_EEEEE
     

解决方案 »

  1.   


                string str = "2|BB|BB_BB|1|A|A_A|3|CCC|CCC_CCC|5|EEEEE|EEEEE_EEEEE|4|DDDD|DDDD_DDDD";
                SortedDictionary<string, List<string>> dic = new SortedDictionary<string, List<string>>();
                string[] temp = str.Split('|');
                string s = "";
                for (int i = 0; i < temp.Length; i++)
                {
                    int j = 0;
                    if (int.TryParse(temp[i], out j))
                    {
                        s = temp[i];
                        dic.Add(s, new List<string>());
                    }
                    else
                    {
                        dic[s].Add(temp[i]);
                    }
                }
                foreach (string s1 in dic.Keys)
                {
                    Console.Write(s1 + " ");
                    foreach (string s2 in dic[s1])
                        Console.Write(s2 + " ");
                    Console.WriteLine();
                }
      

  2.   


    //写了一个LINQ+Regex实现的方法  仅供参考
    void Main()
    {
    string str="2|BB|BB_BB|1|A|A_A|3|CCC|CCC_CCC|5|EEEEE|EEEEE_EEEEE|4|DDDD|DDDD_DDDD";
    var query=(from Match m in Regex.Matches(str,@"(\d+)\|\D+")
               orderby Convert.ToInt32(m.Groups[1].Value) 
              select m.Value.Replace("|"," "));
      
         query.ToList().ForEach(q=>Console.WriteLine(q));\
     /*
     1 A A_A 
    2 BB BB_BB 
    3 CCC CCC_CCC 
    4 DDDD DDDD_DDDD
    5 EEEEE EEEEE_EEEEE   */
    }
      

  3.   

    简单点:            string str = "2|BB|BB_BB|1|A|A_A|3|CCC|CCC_CCC|5|EEEEE|EEEEE_EEEEE|4|DDDD|DDDD_DDDD";
                string[] temp = Regex.Replace(str, @"\|(\d+)", @"^$1").Split('^');
                Array.Sort(temp, (s1, s2) => int.Parse(s1.Split('|')[0]).CompareTo(int.Parse(s2.Split('|')[0])));
                foreach (string s in temp)
                    Console.WriteLine(s.Replace('|', ' '));
      

  4.   


    void Main()
    {
    string str="2|BB|BB_BB|1|A|A_A|3|CCC|CCC_CCC|5|EEEEE|EEEEE_EEEEE|4|DDDD|DDDD_DDDD";
    var query=from Match m in Regex.Matches(str,@"(\d+)\|\D+")
               orderby Convert.ToInt32(m.Groups[1].Value) 
              select m.Value.Replace("|"," ");
      
         query.ToList().ForEach(q=>Console.WriteLine(q));
     /*
     1 A A_A 
     2 BB BB_BB 
     3 CCC CCC_CCC 
     4 DDDD DDDD_DDDD
     5 EEEEE EEEEE_EEEEE 
     */
    }