需求:如图产品有数字的要在数字前面加上*号,没有数字的要加上(*1),如果是多个产品的还要在数量后面加上[0]
这个是我做的winform程序,数据是打开的Excel格式文件,处理之后再导出为Excel格式文件,代码写到一半感觉逻辑有点混乱了,请各位大神帮忙指导一下,谢谢
    public void GetDataset(DataSet ds)
        {
            //遍历行
            foreach (DataRow mDr in ds.Tables[0].Rows)
            {
                //遍历列
                foreach (DataColumn mDc in ds.Tables[0].Columns)
                {
                    String str = mDr[mDc].ToString();                    if (str.IndexOf("+") > 0)//如果在单元格中搜索到+符号则执行下面操作
                    {
                        str.Substring(str.IndexOf("+"), str.Length);
                    }
                    else//如果在单元格中没有搜索到+符号则执行下面操作
                    {
                        if (str.IndexOf("(") > 0)
                        {
                            str = str.Insert(str.IndexOf("(") + 1, "*");
                        }
                        else
                        {
                            str += str + "(*1)";
                        }
                    }                }
            }
        }

解决方案 »

  1.   


    List<string> list = new List<string>()
    {
        "苹果+安卓(2)+Microsoft",
        "苹果(3)+安卓(2)+Microsoft(5)",
        "苹果+安卓+Microsoft(2)",
        "苹果(2)+安卓+Microsoft(2)",
        "苹果(2)",
        "安卓"
    };
    foreach (var row in list)
    {
        string newStr = string.Empty;
        string[] section = row.Split('+');
        for (int i = 0; i < section.Count(); i++)
        {
            string[] arr = section[i].Split('(', ')');
            if (arr.Count() == 1)
            {
                newStr += arr[0] + "(*1)";
            }
            else
            {
                newStr += string.Format("{0}(*{1})", arr[0], arr[1]);
            }
            if (section.Count() > 1 && i < section.Count() -1) newStr += "[0]";
            if (i < section.Count() - 1) newStr += "+";
        }    Console.WriteLine(newStr);
    }Console.ReadKey();
      

  2.   

                var a = new string[] {
                    "苹果+Android(2)+Micsoft",
                    "苹果(3)+Android(2)+Micsoft(5)",
                    "苹果+Android(2)+Micsoft",
                    "苹果+Android+Micsoft(2)",
                    "苹果(2)+Android+Micsoft(2)",
                    "苹果(2)+Android(2)+Micsoft",
                    "苹果(2)",
                    "Android",
                };
                for (var i = 0; i < a.Length; i++)
                {
                    var b = new StringBuilder(a[i]);
                    for (var j = 1; j < b.Length; j++)
                    {
                        if (b[j] == '+')
                        {
                            var c = "(1)";
                            if (b[j - 1] == ')') c= "[0]";
                            b.Insert(j, c);
                            j += c.Length;
                        }
                    }
                    if (b[b.Length - 1] != ')') b.Append("(1)");
                    Console.WriteLine(b.ToString());
                }
    苹果(1)+Android(2)[0]+Micsoft(1)
    苹果(3)[0]+Android(2)[0]+Micsoft(5)
    苹果(1)+Android(2)[0]+Micsoft(1)
    苹果(1)+Android(1)+Micsoft(2)
    苹果(2)[0]+Android(1)+Micsoft(2)
    苹果(2)[0]+Android(2)[0]+Micsoft(1)
    苹果(2)
    Android(1)
      

  3.   

    如果只有苹果Android和Microsoft这三个固定词,直接统计数字再拼接不就行了?不然的话就只能split了。
      

  4.   

     List<string> list = new List<string>() { 
                    "苹果+Android(2)+Microsoft", 
                    "苹果(3)+Android(2)+Microsoft(5)",
                    "苹果+Android+Microsoft(2)", 
                    "苹果(2)+Android+Microsoft(2)", 
                    "苹果(2)", 
                    "Android" };
                foreach (var row in list)
                {
                    string[] Arr = row.ToString().Split('+');
                    string returnString = "";
                    for (int i = 0; i < Arr.Length; i++)
                    {
                        if (Arr[i].IndexOf("(") == -1)
                        {
                            Arr[i] = Arr[i] + "(1)";
                        }
                        returnString += "+" + Arr[i];
                    }
                    Console.WriteLine(returnString.TrimStart('+').Replace("+", "[0]+").Replace("(", "(*"));
                }
                Console.ReadKey();
      

  5.   

    写方法接收元数据,将原数据Split('+')得到一个数组,然后判断各个元素,用stringbuilder来拼接中间结果,最后tostring()。
      

  6.   

    正则都不需要,按+分割,然后按通过LastIndexOf来获取 (和)的位置,如果都能成功获取,那么截取后尝试int.parse,失败提示异常,否则就是有几个数字,当然如果不能成功获取,那么就是数量1
      

  7.   

    List<string> list = new List<string>() { 
                    "苹果+Android(2)+Microsoft", 
                    "苹果(3)+Android(2)+Microsoft(5)",
                    "苹果+Android+Microsoft(2)", 
                    "苹果(2)+Android+Microsoft(2)", 
                    "苹果(2)", 
                    "Android" };            foreach(var item in list)
                {
                        string[] arr = item.Split('+');
                        for (int i = 0; i < arr.Length;i++ )
                        {
                            if (arr[i].Contains("("))
                                arr[i] = arr[i].Replace("(", "(*");
                            else
                                arr[i] = arr[i] + "(*1)";
                            if (i < arr.Length - 1)
                                arr[i] += "[0]";
                        }
                    
                    Console.WriteLine(string.Join("+",arr));            
                }