在C#中:在以逗号分隔的string列表中,在string周围添加引号

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

如果我有一个逗号分隔的string,如:

string list = "Fred,Sam,Mike,Sarah"; 

如何获取每个元素并在其周围添加引号,并将其粘贴回来,如下所示:

 string newList = "'Fred','Sam','Mike','Sarah'"; 

我假设迭代每一个将是一个开始,但我被困在那之后。

一个丑陋的解决scheme是:

 int number = 0; string newList = ""; foreach (string item in list.Split(new char[] {','})) { if (number > 0) { newList = newList + "," + "'" + item + "'"; } else { newList = "'" + item + "'"; } number++; } 
 string s = "A,B,C"; string replaced = "'"+s.Replace(",", "','")+"'"; 

感谢您的意见,我错过了外部报价。

当然..如果源是一个空string,你想要额外的引号吗? 而如果input是一堆空白…? 我的意思是,为了给出100%完整的解决scheme,我可能会要求一个unit testing列表,但是我希望我的直觉能够回答你的核心问题。

更新 :一个基于LINQ的替代方法也被提出(使用String.Format的附加好处,因此不必担心前导/尾随的引号):

 string list = "Fred,Sam,Mike,Sarah"; string newList = string.Join(",", list.Split(',').Select(x => string.Format("'{0}'", x)).ToList()); 
 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); 

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

 return list.Split(',').Select(x => "'" + x + "'").JoinStrings(","); 

还有一个在其他地方的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(); } 

这些日子string.Join有一个generics重载虽然,所以你可以使用:

 return string.Join(",", list.Split(',').Select(x => $"'{x}'")); 
 string[] splitList = list.Split(','); string newList = "'" + string.Join("','", splitList) + "'"; 

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

 string sep = String.Join(", ", __messages.Select(x => "'" + x + "'")); 

我认为最简单的事情将是Split ,然后Join

 string nameList = "Fred,Sam,Mike,Sarah"; string[] names = nameList.Split(','); string quotedNames = "'" + string.Join("','", names) + "'"; 

我不能编写C#代码,但是这个简单的JavaScript代码可能很容易适应:

 var s = "Fred,Sam,Mike,Sarah"; alert(s.replace(/\b/g, "'")); 

它只是用单引号replace边界(string的开始/结束,从字符非标点符号的转换)。

 string list = "Fred,Sam,Mike,Sarah"; string[] splitList = list.Split(','); for (int i = 0; i < splitList.Length; i++) splitList[i] = String.Format("'{0}'", splitList[i]); string newList = String.Join(",", splitList); 

如果您使用JSON,以下function将有所帮助

 var string[] keys = list.Split(','); console.log(JSON.stringify(keys)); 

我的要求:

  1. 使用逗号分隔项目。
  2. 将所有项目用双引号括起来。
  3. 转义string中现有的双引号。
  4. 处理空string以避免错误。
  5. 不要打扰用双引号包装空string。
  6. 终止回车和换行。

    string.Join(“,”,lCol.Select(s => s == null?null:(“\”“+ s.Replace(”\“”,“\”\“”)+“\”“) ))+“\ r \ n”;

@ PhiLho的JavaScript正则expression式解决scheme的C#实现如下所示:

 Regex regex = new Regex( @"\b", RegexOptions.ECMAScript | RegexOptions.Compiled ); string list = "Fred,Sam,Mike,Sarah"; string newList = regex.Replace(list,"'"); 

我的“不太复杂”的方法…我想这是一个很好的做法,使用StringBuilder,因为列表可以非常大。

 string list = "Fred,Sam,Mike,Sarah"; StringBuilder sb = new StringBuilder(); string[] listArray = list.Split(new char[] { ',' }); for (int i = 0; i < listArray.Length; i++) { sb.Append("'").Append(listArray[i]).Append("'"); if (i != (listArray.Length - 1)) sb.Append(","); } string newList = sb.ToString(); Console.WriteLine(newList); 

你要处理大量的CSV? 如果是这样,你也应该考虑使用一个库来做到这一点。 不要重新发明轮子。 不幸的是,我还没有find像Python的CSV库一样简单的库,但是我已经在MSDN杂志上看到了FileHelpers (免费)的评论,看起来相当不错。 也有可能还有其他免费的图书馆。 这一切都取决于你将要做多less处理。 通常它会增长,直到你意识到你会更好地使用图书馆。

这是一个使用string插值的C#6解决scheme。

 string newList = string.Join(",", list.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => $"'{x}'") .ToList()); 

或者,如果你喜欢String.Format的C#5选项:

 string newList = string.Join(",", list.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => String.Format("'{0}'", x)) .ToList()); 

使用StringSplitOptions将删除任何空值,所以你不会有任何空的引号,如果这是你想要避免的东西。

我发现了这个问题的一个新的解决scheme

我使用linq从网格中select项目值绑定一个列表,然后使用String.Join()属性为每个string集合添加一个逗号分隔的string。

 String str1 = String.Empty; String str2 = String.Empty; //str1 = String.Join(",", values); if you use this method,result "X,Y,Z" str1 =String.Join("'" + "," + "'", values); //The result of str1 is "X','Y','Z" str2 = str1.Insert(0, "'").Insert(str1.Length+1, "'"); //The result of str2 is 'X','Y','Z' 

我希望这会有所帮助!!!!!!

对于喜欢像我这样的扩展方法的人,这里是:

  public static string MethodA(this string[] array, string seperatedCharecter = "|") { return array.Any() ? string.Join(seperatedCharecter, array) : string.Empty; } public static string MethodB(this string[] array, string seperatedChar = "|") { return array.Any() ? MethodA(array.Select(x => $"'{x}'").ToArray(), seperatedChar) : string.Empty; }