这可能有一个简单的答案,但我一定没有足够的咖啡来自己解决这个问题:
如果我有逗号分隔的字符串,例如:
string list = "Fred,Sam,Mike,Sarah";
如何获取每个元素并在其周围添加引号并将其粘贴回如下字符串:
string newList = "'Fred','Sam','Mike','Sarah'";
我假设迭代每一个都是一个开始,但在那之后我感到难过。
一个难看的解决方案:
int number = 0;
string newList = "";
foreach (string item in list.Split(new char[] {','}))
{
if (number > 0)
{
newList = newList + "," + "'" + item + "'";
}
else
{
newList = "'" + item + "'";
}
number++;
}
答案 0 :(得分:77)
string s = "A,B,C";
string replaced = "'"+s.Replace(",", "','")+"'";
感谢您的评论,我错过了外部报价。
当然..如果源是一个空字符串,你想要它周围的额外引号吗?如果输入是一堆空格怎么办?我的意思是,为了给出100%完整的解决方案,我可能会要求提供单元测试列表,但我希望我的直觉能够回答你的核心问题。
更新:还提出了一个基于LINQ的替代方案(使用String.Format的额外好处,因此不必担心前导/尾随引号):
string list = "Fred,Sam,Mike,Sarah";
string newList = string.Join(",", list.Split(',').Select(x => string.Format("'{0}'", x)).ToList());
答案 1 :(得分:23)
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(",");
在SO的其他地方有一个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
有一个通用的重载,所以你可以使用:
return string.Join(",", list.Split(',').Select(x => $"'{x}'"));
答案 2 :(得分:18)
按照Jon Skeet上面的例子,这对我有用。我已经有一个名为__messages的List<String>
变量,所以这就是我所做的:
string sep = String.Join(", ", __messages.Select(x => "'" + x + "'"));
答案 3 :(得分:16)
string[] splitList = list.Split(',');
string newList = "'" + string.Join("','", splitList) + "'";
答案 4 :(得分:4)
string nameList = "Fred,Sam,Mike,Sarah";
string[] names = nameList.Split(',');
string quotedNames = "'" + string.Join("','", names) + "'";
答案 5 :(得分:3)
基于Jon Skeet的示例,但针对.NET 4+进行了现代化:
// [ "foo", "bar" ] => "\"foo\"", "\"bar\""
string.Join(", ", strList.Select(x => $"\"{x}\""));
答案 6 :(得分:2)
我无法编写C#代码,但这个简单的JavaScript代码可能很容易适应:
var s = "Fred,Sam,Mike,Sarah";
alert(s.replace(/\b/g, "'"));
它只是用单引号替换边界(字符串的开始/结束,从单词字符非标点符号的转换)。
答案 7 :(得分:1)
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);
答案 8 :(得分:1)
如果您使用的是JSON,则以下功能可以提供帮助
var string[] keys = list.Split(',');
console.log(JSON.stringify(keys));
答案 9 :(得分:1)
我的要求:
使用回车和换行符终止。
string.Join(“,”,lCol.Select(s =&gt; s == null?null:(“\”“+ s.Replace(”\“”,“\”\“”)+“ \“”)))+“\ r \ n”;
答案 10 :(得分:0)
@ PhiLho的JavaScript正则表达式解决方案的C#实现如下所示:
Regex regex = new Regex(
@"\b",
RegexOptions.ECMAScript
| RegexOptions.Compiled
);
string list = "Fred,Sam,Mike,Sarah";
string newList = regex.Replace(list,"'");
答案 11 :(得分:0)
我的“不太复杂”的方法...... 我认为使用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);
答案 12 :(得分:0)
您打算处理大量CSV吗?如果是这样,您还应该考虑使用库来执行此操作。不要重新发明轮子。不幸的是,我没有找到像Python的CSV库那么简单的库,但是我看到了FileHelpers(免费)reviewed at MSDN Magazine,它看起来很不错。那里可能还有其他免费图书馆。这一切都取决于你将要做多少处理。它经常会增长和增长,直到你意识到你最好使用图书馆。
答案 13 :(得分:0)
这是使用String Interpolation的C#6解决方案。
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将删除所有空值,这样就不会有任何空引号,如果这是你想要避免的话。
答案 14 :(得分:0)
我找到了解决此问题的新方法
我使用linq通过网格中的选定项值绑定列表,然后使用String.Join()属性为每个字符串集合添加逗号分隔的字符串。
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'
我希望这会有所帮助!!!!!!
答案 15 :(得分:0)
对于喜欢像我这样的扩展方法的人来说,这里是:
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;
}