用Pipe最简单的方式拆分字符串?

时间:2014-05-27 06:47:16

标签: c# .net linq

有一个字符串让我们说

string mystring = "A\nB\nC\nD\nE\nF\nG\n"

希望用|转换它大块5个

string Converted string ="ABCDE|FG"

任何一个班轮解决方案..

我走这条路

private void TweakInputLines(string InputData)
{
     List<string> lstInput = new List<string>();
     if (!string.IsNullOrEmpty(InputData))
     {
          lstInput = InputData.Split('\n').ToList();
          if (lstInput.Count > 4)
          {

          }
     }
}

4 个答案:

答案 0 :(得分:3)

试试这个衬垫

string mystring = "A\nB\nC\nD\nE\nF\nG\n";
var result = Regex.Replace(mystring.Replace("\n", ""), ".{5}", "$0|");

这是demo

答案 1 :(得分:1)

一般解决方案(保留可变长度行):

string input = "A\nBC\nDEF\nG\nH\nI\nJKL\nMN\nO\nP\nQR\nS";
string output = string.Join("|", input.Split('\n')
                                      .Select((s, i) => new { s, i })
                                      .GroupBy(p => p.i / 5)
                                      .Select(g => string.Join("", g.Select(p => p.s))));

输出:

ABCDEFGH|IJKLMNOP|QRS

<强>更新

如果您使用.Net 3.5,则需要在.ToArray()方法中添加string.Join()次来电。

string input = "A\nBC\nDEF\nG\nH\nI\nJKL\nMN\nO\nP\nQR\nS";
string output = string.Join("|", input.Split('\n')
                                      .Select((s, i) => new { s, i })
                                      .GroupBy(p => p.i / 5)
                                      .Select(g => string.Join("", g.Select(p => p.s).ToArray()))
                                      .ToArray());

更新2

另一个选择是使用@SriramSakthivel

稍加修改的解决方案
string input = "A\nBC\nDEF\nG\nH\nI\nJKL\nMN\nO\nP\nQR\nS";
string output = Regex.Replace(input, @"((?:.*\n){4}.*)\n", "$1|").Replace("\n", "");

答案 2 :(得分:0)

简单代码

private void TweakInputLines(string InputData)
    {
        List<string> lstInput = new List<string>();
        var returnstring = "";
        if (!string.IsNullOrEmpty(InputData))
        {
            lstInput = InputData.Split('\n').ToList();
            if (lstInput.Count > 9999)
            {
                int counter = 0;
                foreach (var eachcharitem in lstInput)
                {
                    counter++;
                    returnstring = returnstring + eachcharitem;
                    if (counter == 5)
                    {
                        returnstring = returnstring + "|";
                        counter = 0;
                    }
                }

            }
        }

    }

答案 3 :(得分:0)

另一种使用Linq的解决方案 - 它或多或少是一个&#34;单线&#34;:

string mystring = "A\nB\nC\nD\nE\nF\nG\n";

var str = mystring
           .Select((value, index) => new { Index = index, Value = value })    // insert Index    
           .GroupBy(i => (int)(i.Index / 5))                                  // group by index / 5
           .Select(value => String.Join("",value.Select(temp => temp.Value))) // create string out of grouped chars
           .Aggregate((a,b) => a + "|" + b);                                  // create one string out of splitted chars 
                                                                              // and join the "|"-string in between
相关问题