评估(求和)csharp中分隔的多个字符串?

时间:2016-10-19 17:58:46

标签: c# functional-programming

我如何使用此分隔符评估此字符串#c" stringtosum" #g

代码1,码2,的#C55 + 35 + 97#克下,CODEN,CODE3,码4,的#C44 + 25 + 07#克密码子

55 + 35 + 97 = 187

44 + 25 + 07 = 76

并输出此

代码1,码2,的#C187#克下,CODEN,CODE3,码4,的#C76#克密码子

我正在使用这两个字符串,#c55 + 35 + 97#g #c44 + 25 + 07#g ,即时评估(总和)这两个

55 + 35 + 97 = 187

44 + 25 + 07 = 76

并输出此

代码1,码2,·C的 187 #克,CODEN,CODE3,码4,#ç 76 #gcoden

我有多个要求和的字符串

4 个答案:

答案 0 :(得分:1)

首先,您可以使用#c([^#]*)#之类的正则表达式来查找匹配项。然后你只需要在分组中取出字符串,在加号上拆分,将值解析为整数,然后像这样进行求和。

string input = "code1,code2,#c55+35+97#g,coden,code3,code4,#c44+25+07#gcoden";

string output = Regex.Replace(
    input, 
    "#c([^#]*)#", 
    m => "#c" + m.Groups[1].Value.Split('+').Sum(int.Parse) + "#");

Console.WriteLine(output);

输出

  

代码1,码2,#C187#克,CODEN,CODE3,码4,#C76#gcoden

答案 1 :(得分:1)

  

请帮帮我

好吧......因为你问得很好。

 var str = "code1,code2,#c55+35+97#g,coden,code3,code4,#c44+25+07#g,coden";
        var parts = str.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

        var builder = new StringBuilder();

        for (var i = 0; i < parts.Length; i++)
        {
            var temp = parts[i];

            if (temp.StartsWith("#c") && temp.EndsWith("#g"))
            {
                var nums = temp.Substring(2, temp.Length - 4).Split(new[] { "+" }, StringSplitOptions.RemoveEmptyEntries);
                temp = $"#c{nums.Sum(int.Parse)}#g";
            }
            builder.Append(temp);
            if (i != parts.Length-1)
                builder.Append(",");
        }

        var output = builder.ToString();

答案 2 :(得分:1)

您可以使用正则表达式来标识要解析和评估的字符串部分,然后引入Jace.NET NuGet package来评估计算。此方法适用于所有类型的算术运算,而不仅适用于求和:

var inputString = "code1,code2,#c55+35+97#g,coden,code3,code4,#c44+25+07#gcoden";
var calcEngine = new CalculationEngine();       // add "using Jace;" at the top of your code file to bring in the CalculationEngine
var outputString = Regex.Replace(inputString, "#c([^#]*)#g", m => "#c" + calcEngine.Calculate(m.Groups[1].Value).ToString() + "#g");

答案 3 :(得分:-1)

我建议查看正则表达式(正则表达式)。正则表达式允许您解析字符串并挑选出某些部分。从那里,您可以添加它们,然后将它们替换回您的字符串。

例如,“\ d * + \ d *”将允许您选择两个子串“55 + 35 + 97”和“44 + 25 + 07”