C# 从列表中删除字符串的一部分<;字符串>;
我有一个C# 从列表中删除字符串的一部分<;字符串>;,c#,linq,select,C#,Linq,Select,我有一个列表,字符串部分表示我需要过滤掉的文件名:包含字符“&”之前的任何内容都必须删除 List<string> zippedTransactions = new List<string>(); zippedTransactions.Add("33396&20151007112154000549659S03333396SUMMARIES.PDF"); zippedTransactions.Add("33395&2015100711240000054965
列表
,字符串部分表示我需要过滤掉的文件名:包含字符“&”之前的任何内容都必须删除
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"
List-zippedTransactions=new-List();
zippedTransactions.Add(“33396&20151007112154000549659S03333396摘要.PDF”);
zippedTransactions.Add(“33395&20151007112400000549659S03333395摘要.PDF”);
zippedTransactions.Add(“33397&20151007112555000549659S03333397摘要.PDF”);
//期望输出:
//“20151007112154000549659S03333396摘要.PDF”;
//“20151007112400000549659S03333395摘要.PDF”;
//“20151007112555000549659S03333397摘要.PDF”
注意:我不想给它一个经典的迭代式外观,因为C提供了大量的功能接口来与这种数据结构交互,我想开始使用它。以下代码将帮助您
for (int i = 0; i < zippedTransactions.Count; i++)
{
string[] result = zippedTransactions[i].Split('&');
zippedTransactions[i] = result[result.Length-1];
}
for(int i=0;i
使用string.Split在所需字符处拆分字符串并检索所需部分:
foreach (var item in zippedTransactions)
{
string[] result = item.Split('&');
Console.WriteLine(result[1]);
}
下面是一个使用正则表达式的Linq方法
Transactions = Transactions.Select(x => Regex.Replace(x, ".*&", string.Empty)).ToList();
如果文件名中没有&
,那么与拆分('&')[1]
相比,它的容错性更强
for (int i = 0; i < zippedTransactions.Count; i++)
{
zippedTransactions[i] = zippedTransactions[i].Split('&')[1];
}
for(int i=0;i
您可以使用string.IndexOf函数查找字符串中某个字符的位置,然后使用string.Remove删除该字符:
for(int i =0; i < zippedTransactions.Count; i++)
{
int count = zippedTransactions[i].IndexOf("&") + 1;
zippedTransactions[i] = zippedTransactions[i].Remove(0, count);
}
for(int i=0;i
如果您碰巧有visual studio,并且有一个支持的版本,我建议您试试这个
> 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" }
>
>zippedTransactions=new List(){
“33396&20151007112154000549659S03333396摘要.PDF”,
“33395&20151007112400000549659S03333395摘要.PDF”,
“33397&20151007112555000549659S03333397摘要.PDF”
};
>
>zippedTransactions.Select(dirname=>dirname.Split('&')[1])
Enumerable.WhereSelectListIterator{“20151007112154000549659S03333396SUMMARIES.PDF”、“20151007112400000549659S03333395SUMMARIES.PDF”、“20151007112555000549659S03333397SUMMARIES.PDF”}
>
即使你没有,你也可以通过查看代码来了解发生了什么
WhereSelectListIterator
是一个数据结构,其中包含您要在该数据结构上执行的逻辑。只有当您使用它时(例如,在末尾调用.ToList()
),才会对其进行计算(读取:循环实际上发生)
这段代码将只接受在“&”上拆分字符串后的第二个元素,因此您可能需要对其进行泛化或根据您的需求对其进行调整。好的,您尝试过什么了吗?我建议分两步解决这个问题:1)找出如何为单个输入字符串获得所需的值。2) 研究如何将其应用于字符串列表。我有一种使用foreach的方法,但我想避免循环的迭代。有些东西必须迭代,不是吗?您可以使用LINQ将迭代移动到库代码中,但它仍然会涉及到迭代。那么,你到底为什么要把一个简单的for循环过度复杂化…?太棒了,但它仍然会涉及到内部迭代。最好添加一些词语来描述你的答案,而不是只发布代码的答案不太正确。这不仅需要对
结果进行长度检查
,而且如果字符串中有多个&characters,也不会正确操作;只需要最后一件。由于String.Split总是在数组中给出至少一个结果,因此更好的解决方案是zippedTransactions[i]=result[result.Length-1]代码>