C# 发送不需要的字符';s到数组的末尾

C# 发送不需要的字符';s到数组的末尾,c#,arrays,regex,char,C#,Arrays,Regex,Char,假设我们有一根绳子 String data = "<span> 0397]);}}:;)]</span>"; 我如何处理这些数据并将所有不需要的数据替换到数组的末尾,但将所有数据从已移动的当前字符中移走,以便在末尾为不需要的数据腾出空间 Char[] sendToEnd = { ';', ')', '}', ']' }; 我尝试过一个循环,但当它在已经交换的数据上循环时,它会导致无限循环 最后,字符串数据应该是 "<span> 0397</span&

假设我们有一根绳子

String data = "<span> 0397]);}}:;)]</span>";
我如何处理这些数据并将所有不需要的数据替换到数组的末尾,但将所有数据从已移动的当前字符中移走,以便在末尾为不需要的数据腾出空间

Char[] sendToEnd = { ';', ')', '}', ']' };
我尝试过一个循环,但当它在已经交换的数据上循环时,它会导致无限循环

最后,字符串数据应该是

"<span> 0397</span>]);}}:;)]"
“0397]);}}:;)]

将字符移动到另一个数组中,并加入数组以形成最终字符串,而不是最初将字符移动到末尾。

将字符移动到另一个数组中,并加入数组以形成最终字符串

var str = new String(data.Where(c => !sendToEnd.Contains(c))
                         .Concat(data.Where(c => sendToEnd.Contains(c)))
                         .ToArray());
还声明
sendToEnd

var sendToEnd = new HashSet<char>(new char[] { ';', ')', '}', ']' });
var sendToEnd=new HashSet(new char[]{';','),'}',']});
可以表现得更好

还声明
sendToEnd

var sendToEnd = new HashSet<char>(new char[] { ';', ')', '}', ']' });
var sendToEnd=new HashSet(new char[]{';','),'}',']});

可以提供更好的性能

如果不需要,那么为什么您仍然需要它?:)好吧,它既是想要的,也是不想要的,在这段时间里它不是想要的,但它仍然需要。如果它是不想要的,那么为什么你仍然想要它呢?:)好吧,它既想要也不想要,在跨度中它不是想要的,但它仍然需要。我有一个解决方案,全部打印出来,但这是如此优雅。你能解释一下你的代码在做什么吗?还有什么是哈希集?第一个
数据。其中
返回需要的数据,第二个返回不需要的数据。我将它们合并(如list1+list2)并通过
ToArray
转换为char数组,然后将该数组交给
新字符串
构造函数。类似于:
new String((想要的+不想要的).ToArray())
这两个数据。Where-give错误“error 2'String”不包含“Where”的定义,并且没有扩展方法“Where”可以找到“接受类型为“String”的第一个参数(是否缺少using指令或程序集引用?”@L.B谢谢,第一次VS没有在右键菜单中显示“解决问题”。我已经键入了一个解决方案,但这要优雅得多。你能解释一下你的代码在做什么吗?还有什么是哈希集?第一个
数据。其中
返回需要的数据,第二个返回不需要的数据。我将它们合并(如list1+list2)并通过
ToArray
转换为char数组,然后将该数组交给
新字符串
构造函数。类似于:
new String((想要的+不想要的).ToArray())
这两个数据。Where-give错误“error 2'String”不包含“Where”的定义,并且没有扩展方法“Where”可以找到“接受类型为“String”的第一个参数(是否缺少using指令或程序集引用?”@L.B谢谢,第一次VS没有在右键菜单中显示“解决问题”。这会起作用,但我选择的答案是更干净的方法+1表示正确答案,虽然这会起作用,但我选择的答案是更干净的方法+1表示正确答案