【问题标题】:How to split string after every n-th character?如何在每个第 n 个字符后拆分字符串?
【发布时间】:2022-03-07 19:18:52
【问题描述】:

我有一个字符串,我想在每个第二个逗号后拆分字符串。在 c# 中使用拆分字符串是否可行?

示例字符串:

"This,is,an, example,for,the,stackoverflow,community"

期望的输出

This,is
an,example
for,the
stackoverflow,community

任何帮助将不胜感激!

【问题讨论】:

  • 不,您可以使用正则表达式或手动编写的循环来完成此操作。拆分适用于角色的每个实例。
  • 您的意思是:“这是 stackoverflow 社区的一个示例”?因为你所拥有的不是每个第二个逗号
  • @Heinzi 他们没有表现出自己解决问题的实际尝试,因此可能因缺乏研究而被否决。

标签: c# split


【解决方案1】:

使用 .NET 6 中的 Enumerable.Chunk,您可以

  • ","上拆分,
  • 创建包含两个项目的块,然后
  • 重新加入这些块:
string input = "This,is,an,example,for,the,stackoverflow,community";

var output = input.Split(",")
    .Chunk(2)
    .Select(chunk => string.Join(",", chunk));

foreach (string s in output)
    Console.WriteLine(s);

fiddle

如果您坚持使用“经典”.NET Framework,以下是 .NET

【讨论】:

  • 哇,太好了。我不知道Chuck
  • Split(",") 将不起作用,因为没有只接受字符串的重载。而是使用Split(',')
  • @juharr 在 .net 6 中它会起作用。
  • @HamletHakobyan 哦,他们将 StringSplitOptions 设为可选。
  • 感谢您的回复!这个解决方案完美运行,但不幸的是我在 .net core 3.1 上运行,所以 chunk 对我不起作用:/ chunk enumerable 对于拆分字符串来说似乎相当复杂。 regex.split 会起作用吗?我试图得到这个组合,但没有成功
【解决方案2】:

你可以这样做:

var s = "This,is,an, example,for, the, stackoverflow, community";

var a = ("," + s + ",").Split(',');

//  requires using System.Linq;
var b = Enumerable.Range(0, a.Length / 2)
        .Select(i => $"{a[2 * i]}, {a[2 * i + 1]}".Trim(',', ' '));

Range 枚举结果数组并计算相应字符串对的串联。

【讨论】:

  • 也许你最后想要var c = string.Join("\r\n", b);,或者类似的。
  • 同意@JeppeStigNielsen:输出似乎仍然错误。不过我喜欢双班轮。
  • 看这个小提琴:dotnetfiddle.net/yqkw53
【解决方案3】:

您还可以在逗号前后使用取反字符类[^,]+ 来匹配一个或多个字符(逗号除外):

string pattern = @"[^,]+,[^,]+";
string input = "This,is,an, example,for,the,stackoverflow,community";
foreach (Match m in Regex.Matches(input, pattern))
{
    Console.WriteLine(m.Value);
}

输出

This,is
an, example
for,the
stackoverflow,community

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多