我有一个List<string>
,字符串部分代表我需要过滤掉的文件名:在角色&#39;&amp;&#39;之前出现的任何内容。包含必须删除。
List<string> zippedTransactions = new List<string>();
zippedTransactions.Add("33396&20151007112154000549659S03333396SUMMARIES.PDF");
zippedTransactions.Add("33395&20151007112400000549659S03333395SUMMARIES.PDF");
zippedTransactions.Add("33397&20151007112555000549659S03333397SUMMARIES.PDF");
// desired output:
// "20151007112154000549659S03333396SUMMARIES.PDF";
// "20151007112400000549659S03333395SUMMARIES.PDF";
// "20151007112555000549659S03333397SUMMARIES.PDF"
注意:我不想给它带来经典的迭代式外观,因为C#提供了大量的功能接口来与这种数据结构进行交互,我想开始使用它。
答案 0 :(得分:6)
这是一个使用RegEx的Linq方法
Transactions = Transactions.Select(x => Regex.Replace(x, ".*&", string.Empty)).ToList();
如果您的文件名中没有Split('&')[1]
,那么与&
相比,它的容错能力更强
答案 1 :(得分:0)
以下代码可以帮助您
for (int i = 0; i < zippedTransactions.Count; i++)
{
string[] result = zippedTransactions[i].Split('&');
zippedTransactions[i] = result[result.Length-1];
}
答案 2 :(得分:0)
使用string.Split将字符串拆分为所需的字符并检索所需的部分:
foreach (var item in zippedTransactions)
{
string[] result = item.Split('&');
Console.WriteLine(result[1]);
}
答案 3 :(得分:0)
试试这个
for (int i = 0; i < zippedTransactions.Count; i++)
{
zippedTransactions[i] = zippedTransactions[i].Split('&')[1];
}
答案 4 :(得分:0)
您可以使用string.IndexOf函数查找字符串中字符的位置,然后使用string.Remove删除到该点的字符:
http.conf
答案 5 :(得分:0)
如果你碰巧有视觉工作室和支持C# Interactive的版本,我建议你尝试一下。
> zippedTransactions = new List<string>() {
"33396&20151007112154000549659S03333396SUMMARIES.PDF",
"33395&20151007112400000549659S03333395SUMMARIES.PDF",
"33397&20151007112555000549659S03333397SUMMARIES.PDF"
};
>
> zippedTransactions.Select(dirname => dirname.Split('&')[1])
Enumerable.WhereSelectListIterator<string, string> { "20151007112154000549659S03333396SUMMARIES.PDF", "20151007112400000549659S03333395SUMMARIES.PDF", "20151007112555000549659S03333397SUMMARIES.PDF" }
>
即使你不这样做,你也可以通过查看代码来了解正在发生的事情。
WhereSelectListIterator
是一个数据结构,包含您打算在数据结构上执行的逻辑。只有当你使用它时才会对它进行评估(读取:循环实际发生)(例如,在结束时调用.ToList()
)。
此代码只会在“&amp;”上拆分字符串后才会显示第二个元素,因此您可能需要对其进行概括或根据您的要求进行调整。