如何对字符串中的每两行进行计数
本文关键字:两行 字符串 | 更新日期: 2023-09-27 18:08:44
我有一个字符串变量叫做: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
的内容看起来像:
Hello world
6/16/2014大家好5/16/2014
这是测试
5/16/2014
而不是现在没有空格的样子。我想在每两行之间添加空格:
Hello world
6/16/2014
大家好
5/16/2014
这是测试
5/16/2014
在每个文本和日期时间行之后插入空/空格行。
你可以这样做:
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();
使用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)));
这是一个函数,它将在每隔一行之后添加一行。
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();
}
这行得通:
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一路。: -)