在C#中:在以逗号分隔的字符串列表中的字符串周围添加引号

Bob*_*erg 52 c# string

这可能有一个简单的答案,但我一定没有足够的咖啡来自己解决:

如果我有逗号分隔的字符串,例如:

string list = "Fred,Sam,Mike,Sarah";
Run Code Online (Sandbox Code Playgroud)

如何获取每个元素并在其周围添加引号并将其粘贴回如下字符串:

string newList = "'Fred','Sam','Mike','Sarah'";
Run Code Online (Sandbox Code Playgroud)

我假设迭代每一个都是一个开始,但我在那之后感到难过.

一个难看的解决方案:

int number = 0;
string newList = "";
foreach (string item in list.Split(new char[] {','}))
{
    if (number > 0)
    {
        newList = newList + "," + "'" + item + "'";
    }
    else
    {
        newList = "'" + item + "'";
    }
    number++;
}
Run Code Online (Sandbox Code Playgroud)

FOR*_*FOR 79

string s = "A,B,C";
string replaced = "'"+s.Replace(",", "','")+"'";
Run Code Online (Sandbox Code Playgroud)

感谢您的评论,我错过了外部报价.

当然..如果源是一个空字符串,你想要它周围的额外引号吗?如果输入是一堆空格怎么办?我的意思是,为了给出一个100%完整的解决方案,我可能会要求一个单元测试列表,但我希望我的直觉回答你的核心问题.

更新:还提出了一个基于LINQ的替代方案(使用String.Format的额外好处,因此不必担心前导/尾随引号):

string list = "Fred,Sam,Mike,Sarah";
string newList = string.Join(",", list.Split(',').Select(x => string.Format("'{0}'", x)).ToList());
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 24

string[] bits = list.Split(','); // Param arrays are your friend
for (int i=0; i < bits.Length; i++)
{
    bits[i] = "'" + bits[i] + "'";
}
return string.Join(",", bits);
Run Code Online (Sandbox Code Playgroud)

或者您可以使用LINQ,特别是支持IEnumerable<string>... 的String.Join版本

return list.Split(',').Select(x => "'" + x + "'").JoinStrings(",");
Run Code Online (Sandbox Code Playgroud)

在其他地方有一个关于JoinStrings的实现...我会看看它.

编辑:嗯,我想的不是JoinStrings,所以这里是:

public static string JoinStrings<T>(this IEnumerable<T> source, 
                                    string separator)
{
    StringBuilder builder = new StringBuilder();
    bool first = true;
    foreach (T element in source)
    {
        if (first)
        {
            first = false;
        }
        else
        {
            builder.Append(separator);
        }
        builder.Append(element);
    }
    return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)

这些天string.Join虽然有一个通用的重载,所以你可以使用:

return string.Join(",", list.Split(',').Select(x => $"'{x}'"));
Run Code Online (Sandbox Code Playgroud)


vcu*_*kit 20

按照Jon Skeet上面的例子,这对我有用.我已经有一个List<String>名为__messages 的变量,所以这就是我所做的:

string sep = String.Join(", ", __messages.Select(x => "'" + x + "'"));
Run Code Online (Sandbox Code Playgroud)


Tor*_*gen 16

string[] splitList = list.Split(',');
string newList = "'" + string.Join("','", splitList) + "'";
Run Code Online (Sandbox Code Playgroud)


dyl*_*724 7

基于 Jon Skeet 的示例,但针对 .NET 4+ 进行了现代化改造:

// [ "foo", "bar" ] => "\"foo\"", "\"bar\""  
string.Join(", ", strList.Select(x => $"\"{x}\""));
Run Code Online (Sandbox Code Playgroud)