将字符串集合连接成一个带分隔符和封闭字符的字符串

Cod*_*ter 1 c# string concatenation

我有一个源字符串集合,我希望连接到一个目标字符串.

源集合如下所示:

{ "a", "b", "c" }
Run Code Online (Sandbox Code Playgroud)

我希望输出字符串是:

abc
Run Code Online (Sandbox Code Playgroud)

但有时,我也想要一个分隔符.所以对于相同的输入,现在输出是:

a-b-c
Run Code Online (Sandbox Code Playgroud)

最后,输入有时需要包含在其他字符中,在这种情况下[],导致输出为:

[a]-[b]-[c]
Run Code Online (Sandbox Code Playgroud)

空源集合应该生成一个空字符串.我该怎么做?

Cod*_*ter 6

您可以使用静态String.Join()方法执行此操作.

它的基本用法是这样的:

string[] sourceData = new[] { "a", "b", "c" };
string separator = "";
var result = string.Join(separator, sourceData);
Run Code Online (Sandbox Code Playgroud)

当你提供一个空分离,传递的值将简单级联,这样的:"abc".

要使用某个字符串分隔源数据,请提供所需的值作为第一个参数:

string[] sourceData = new[] { "a", "b", "c" };
string separator = "-";
var result = string.Join(separator, sourceData);
Run Code Online (Sandbox Code Playgroud)

现在,字符串"-"将插入源数据中的每个项目之间:"a-b-c".

最后,为了封装或修改源集合中的每个项目,您可以使用Linq的Select()方法使用投影:

string[] sourceData = new[] { "a", "b", "c" };
string separator = "-";
result = String.Join(separator, sourceData.Select(s => "[" + s + "]"));
Run Code Online (Sandbox Code Playgroud)

而不是"[" + s + "]"你最好String.Format()用来提高可读性和易于修改:String.Format("[{0}]", s).

无论哪种方式,这也会返回所需的结果:"[a]-[b]-[c]".