我正在研究如何拆分字符串并将信息存储在数据表中。我可以让拆分和存储正常工作,但问题在于我如何尝试使用拆分。这是我的字符串示例:
itemid/n3,itemid/n4
itemid是项目唯一ID,在/ n之后是用户选择的项目数量,逗号分隔条目
我有一个这样的数据表:
DataTable table = new DataTable();
table.Columns.Add("id", typeof(int));
table.Columns.Add("count", typeof(int));
我希望能够在逗号中拆分字符串,然后将每个值存储在数据表中,使它们出现在同一行(在/ n处拆分)是否有一种简单的方法可以使用拆分执行此操作?或者我最好以另一种方式做到这一点
答案 0 :(得分:3)
是的,你可以先用逗号分隔,然后按/分开:
foreach(var row in myString.Split(','))
{
var fields = row.Split(new string[] { "/n" },
StringSplitOptions.None);
// fields[0] is ID, fields[1] is count
}
这仍然在线性时间内执行,因此它绝对可能是一种方法。
答案 1 :(得分:2)
如果每个记录始终存在“/ n”和“,”,则可以使用带有表达式“(?:/ n | \,)”的正则表达式拆分,然后使用x + = 2而不是x ++循环通过清单。 X将是ID,X + 1将是值。
string Input = "12/nTwelve,13/nThirteen,";
string[] InputSplit = Regex.Split(Input, @"(?:/n|\,)");
for(int i = 0 ; i < ((InputSplit.Length / 2) * 2) ; i+=2){
//Math in the middle helps when there's a trailing comma in the data set
Console.WriteLine(string.Format("{0}\t{1}", InputSplit[i], InputSplit[i+1]));
}
答案 2 :(得分:1)
请注意,对于该示例,我更改了第一列的类型,如在提供的示例字符串中,id是一个字符串。
DataTable table = new DataTable();
table.Columns.Add("id", typeof(string));
table.Columns.Add("count", typeof(int));
var str = "itemid/n3,itemid/n4";
var items =
str.Split(',').Select(
r =>
new
{
Id = r.Split(new[] {"/n"}, StringSplitOptions.RemoveEmptyEntries).First(),
Count = int.Parse(r.Split(new[] {"/n"}, StringSplitOptions.RemoveEmptyEntries).Last())
});
foreach (var item in items)
{
var row = table.NewRow();
row["id"] = item.Id;
row["count"] = item.Count;
}