我有一个名为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日
在每个文字和日期及时间线后插入一个空/空格行。
答案 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一路走来。 : - )