在C#中:添加各地串行情以逗号分隔的字符串
这可能有一个简单的名单,但我不能有足够的咖啡数字出来我自己:在C#中:添加各地串行情以逗号分隔的字符串
如果我有一个逗号分隔字符串,如:
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++;
}
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());
string[] splitList = list.Split(',');
string newList = "'" + string.Join("','", splitList) + "'";
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,特别是与一个版本的string.join支持IEnumerable<string>
的...
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
有一个通用的过载,虽然不是,所以你可以只使用:
return string.Join(",", list.Split(',').Select(x => $"'{x}'"));
我不会写C#代码,但是这个简单的JavaScript代码可能容易适应:
var s = "Fred,Sam,Mike,Sarah";
alert(s.replace(/\b/g, "'"));
它只是用单引号替换边界(字符串的开始/结束,从字符非标点符号的转换)。
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);
@PhiLho的JavaScript正则表达式解决方案的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吗?如果是这样,你还应该考虑使用库来做到这一点。不要重新发明轮子。不幸的是,我还没有找到像Python的CSV库一样简单的库,但是我看过FileHelpers(免费)reviewed at MSDN Magazine,它看起来很不错。这里也可能有其他免费的图书馆。这一切都取决于你将做多少处理。通常它会增长,直到你意识到你会更好地使用图书馆。
以上Jon Skeet的例子,这是对我有用的。我已经有了一个List<String>
变量称为__messages所以这是我做过什么:
string sep = String.Join(", ", __messages.Select(x => "'" + x + "'"));
如果使用JSON,下面的功能将有助于
var string[] keys = list.Split(',');
console.log(JSON.stringify(keys));
我的要求:
- 单独项目使用逗号。
- 将所有项目用双引号括起来。
- 转义字符串中的现有双引号。
- 处理空字符串以避免错误。
- 不要打扰在双引号中包装空字符串。
以回车和换行结束。 (“\”,“\”\“”)+“(”,“;”,“\”\“”)+“ \ “”)))+ “\ r \ n” 个;
下面是使用字符串内插的C#6溶液
string newList = string.Join(",", list.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => $"'{x}'")
.ToList());
或者,如果你喜欢用字符串的C#5选项。格式:
string newList = string.Join(",", list.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => String.Format("'{0}'", x))
.ToList());
使用StringSplitOptions将r删除任何空的值,这样你就不会有任何空的引号,如果这是你想要避免的。
我发现这个问题
我通过选定项目的值从使用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'
我希望这会有所帮助!!!!!!
对于谁爱扩展方法像我一样,这里的人是:
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;
}
我敢肯定有人有一个正则表达式的答案。我认为这将是实现这一目标的方式,但是我今天早上还没有跟上我的正则表达式。 – Codewerks 2008-10-31 15:59:24
不,我认为FOR有最简单的解决方案...记住,用正则表达式,现在你有两个问题。 :) http://www.codinghorror.com/blog/archives/001016.html – 2008-10-31 16:05:07