如何计算字符串中的每两行?

时间:2014-06-16 12:49:55

标签: c# .net winforms

我有一个名为Test的字符串变量 Test的内容为150行。

我想计算每两行,然后在这两行之后插入/添加一个新的空行以在每两行之间留出空间。

因此在索引3中插入索引6中的空行以在索引9中插入空行12,15。 当我到达最后一行时,不要添加空行。只在每两行之间。不是在开始时,而是在每两行之间不在最后。

这就是我所拥有的:combindedString是单字符串变量:

string[] ss = combindedString.Split(new string[] { "\n", "\r\n" },
                              StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < ss.Length; i++)
    ss[i] = ss[i].Trim();

combindedString = String.Join("\n", ss);

在代码之后,这也是我在combindedString中最终需要的代码,它的内容是这样的:

我看到很多行第一行只是文字:hello world
第二行是日期和时间行:6/16/2014 ...
第三行是另一个文本:hello everyone
第四行是日期和时间:5/16/2014 ...

等等所有行都是文本,并在日期和时间之后。

我想在每个文字和日期以及时间线之后插入一个空的空行。 最后,combindedString中的内容将如下所示:

  

你好世界
  2014年6月16日

     

大家好   2014年5月16日

     

这是测试
  2014年5月16日

而不是没有空格的现在。我想在每两行之间添加空格:

  

你好世界
  2014年6月16日
  大家好   2014年5月16日
  这是测试
  2014年5月16日

在每个文字和日期及时间线后插入一个空/空格行。

4 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

string[] lines = combindedString.Split(new string[] { "\n", "\r\n" },
                     StringSplitOptions.RemoveEmptyEntries);

var result = new StringBuilder();
for (int i = 0; i < lines.Length; i++)
{
    if (i % 2 == 0 && i != 0)   // i != 0 to not get blank line at the beginning
        result.AppendLine();
    result.AppendLine(lines[i].Trim());
}
combindedString = result.ToString();

参见示例HERE

答案 1 :(得分:2)

使用List<string>代替数组

要容易得多
string[] lines = new string[] {"1","2","3","4","5","6","7","8","9"};
List<string> copyList = lines.ToList();
for(int x = copyList.Count()- 1; x > 0; x--)
{
    if(x % 2 == 0)
        copyList.Insert(x, "");
}

string combinedString = string.Join(Environment.NewLine, copyList);

还有Linq提供的一行解决方案

string result = string.Join(Environment.NewLine, 
       lines.Select ((l,i) => (i % 2 == 1 ? l + Environment.NewLine : l)));

答案 2 :(得分:0)

这是一个在每隔一行后添加一行的函数。

public string InsertLines(string Test)
{
    var builder = new StringBuilder();
    var lines = Test.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
    for (var i = 0; i < lines.Length; ++i)
    {
        if (i != 0 && i % 2 == 0)
            builder.AppendLine();
        builder.AppendLine(lines[i]);
    }

    return builder.ToString();
 }

答案 3 :(得分:0)

这有效:

var lookup = ss
    .Concat(ss.Length % 2 == 0
        ? Enumerable.Empty<string>()
        : new [] { "" })
    .Select((x, n) => new { x, n })
    .ToLookup(xn => xn.n % 2 == 0, xn => xn.x);

var query =
    lookup[true]
        .Zip(lookup[false], (o, e) => new [] { o, e, "" })
        .SelectMany(x => x);

var result = String.Join(Environment.NewLine, query);

LINQ一路走来。 : - )