2016-10-19 3 views
-1

Как можно оценить эту строку с разделителем этой #c "stringtosum" #GВычислить (суммировать) несколько строк, разделенных символом csharp?

code1, code2, # C55 + 35 + 97 # г, CODEN, code3, code4, # C44 + 25 + 07 #G CODEN

55 + 35 + 97 = 187

44 + 25 + 07 = 76

и выход этот

code1, code2, # C187 # г, CODEN, code3, code4, # C76 # г CODEN

Я использую этот две строки, # C55 + 35 + 97 # г, # C44 + 25 + 07 # г ,, им Тринг оценить (сумма) это два

55 + 35 + 97 = 187

44 + 25 + 07 = 76

и выход этого

code1, code2, # с # г, CODEN, code3, code4, # с #gcoden

У меня есть несколько строки подводить

+1

вы можете быть немного ясно, что вы пытаетесь сделать, и струны вы используете – inan

+0

я использую это две строки, # C55 + 35 + 97 # g, # c44 + 25 + 07 # g ,, im tring для оценки (суммы) – jhonny625

ответ

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); 

Выходы

code1, code2, # C187 # г, CODEN, code3, code4, # C76 # gcoden

+0

очень спасибо. – jhonny625

-1

Я хотел бы предложить, глядя в регулярные выражения (регулярные выражения). Регулярное выражение позволяет вам разбирать строки и выделять определенные части. Оттуда вы можете добавить их, а затем подставить их обратно в свою строку.

В качестве примера, "\ d * + \ d *" позволит вам выбрать два подстроки "55 + 35 + 97" и "44 + 25 + 07"

+0

Я хочу суммировать строку, я не знаю, как я могу это сделать – jhonny625

+0

i can not sum в regex – jhonny625

+0

i dont know How can Я суммирую в regex – jhonny625

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(); 
+0

очень спасибо. – jhonny625

+1

Я бы пошел с ответом @juharr. Это чище, и я думаю, что я изменил вашу начальную строку в конце. Не был уверен, что это была опечатка –

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"); 
+0

очень спасибо. – jhonny625

Смежные вопросы