2017-04-04 58 views
0

我正在讀取文本文件中的所有行到名爲「masterToken」的列表中,我試圖刪除列表中的所有空白(所有空格都是在文本文件中)。 masterToken = masterToken.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();是我目前正在嘗試使用,它不工作。刪除列表中的所有空格C#

masterToken = masterToken.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();有什麼問題和/或是否有更好的方法來實現我想要的?

感謝

public static void Lex() 
{   
    List<string> masterToken = File.ReadAllLines("C:\\Users\\Theo\\Documents\\Visual Studio 2017\\Projects\\Interpreter\\test.txt").ToList(); 

    foreach (var item in masterToken) 
    { 
    Console.Write(item.ToString()); 
    } 

    masterToken = masterToken.Where(s => !string.IsNullOrWhiteSpace(s)).ToList(); 

    Console.WriteLine(""); 

    foreach (var item in masterToken) 
    { 
    Console.Write(item.ToString()); 
    } 

    Console.ReadLine(); 
} 
+4

它將**只會擺脫空行**,因爲您正在迭代每行。如果你想要實際地刪除每個空白處,那麼你的問題就不是很清楚,這樣就可以完全理解單詞。 – Igor

+0

不知道爲什麼它不工作。我使用相同的linq語句做了一個測試,它給了我一個沒有空白條目的新列表。除非您希望它從任何條目中消除任何空白區域,而不僅僅是隻有空白的條目。 –

+0

可能的重複[有效的方法來從字符串中刪除所有空白?](http://stackoverflow.com/questions/6219454/efficient-way-to-remove-all-whitespace-from-string) –

回答

1

替換此行:

masterToken = masterToken.Where(s => !string.IsNullOrWhiteSpace(s)).ToList(); 

通過這樣的:

masterToken.ForEach(s => s = s.Replace(" ","")); 
+0

不,列表將保持不變 –

+0

我已更新了我的答案。 –

+0

也,'.Trim()' – BurnsBA

1

嘗試正則表達式

Regex.Replace(item,@"\s+",""); 
3

我建議你用Regex.Replace用空字符串替換每個空白字符序列\s+。使用這個方法來產生新的字符串,將結果保存到列表:

masterToken = masterToken.Select(t => Regex.Replace(t, @"\s+", "")).ToList(); 

注意,如果你只想刪除開頭和結尾的空格,那麼最好使用Trim()

masterToken = masterToken.Select(t => t.Trim()).ToList(); 

並保持在請注意,TrimReplace都不會修改原始字符串 - 所有這些方法都會返回新的字符串實例。