在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));
我的要求:
- 使用逗号分隔项目。
- 将所有项目用双引号括起来。
- 转义string中现有的双引号。
- 处理空string以避免错误。
- 不要打扰用双引号包装空string。
-
终止回车和换行。
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; }