2012-12-13 37 views
0

的比方說,我們有一個字符串發送垃圾字符的結束陣列

String data = "<span> 0397]);}}:;)]</span>"; 

然後我們發送到一個字符數組

Char[] charData = data.ToCharArray(); 

我怎麼能走線槽這個數據並更換所有不需要的數據到數組的末尾,但移動當前字符中已經移動的所有數據,以便爲不需要的數據結尾騰出空間。

Char[] sendToEnd = { ';', ')', '}', ']' }; 

我試過了一個循環,但它在循環已經交換的數據時會導致無限循環。

在結束的字符串數據應該是

"<span> 0397</span>]);}}:;)]" 
+1

如果它是不需要的,那你爲什麼還想要嗎? :) – dan1111

+0

以及它的想要和不想要的,它不是想要的跨度,但它仍然需要 –

回答

4
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[] { ';', ')', '}', ']' }); 

可以提供更好的性能

+1

我有一個解決方案,所有鍵入,但這是更優雅。 – Kami

+0

你能解釋一下你的代碼在做什麼嗎?什麼是Hashset <>? –

+0

首先'data.Where'返回*想要*數據,第二個返回*無用*數據。我concat他們(如list1 + list2)並通過ToArray轉換爲char數組,並將該數組賦給'new string'構造函數。類似於:'新字符串((想要的+不想要的).ToArray())' –

1

代替最初移動的字符結束時,將其移動到另一個數組並加入陣列以形成最終的字符串。

+0

這將工作,但我選擇的答案是一個更清潔的方法+ 1正確的答案,雖然 –