2017-04-04 12 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+を空の文字列に置き換えることをお勧めします。新しい文字列を生成し、リストに結果を保存するには、このメソッドを使用する:あなたは、唯一の先頭と末尾の空白を削除したい場合は、それはTrim()を使用することをお勧めしますことを

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

注:

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

とで保ちますTrimReplaceも元の文字列を変更しないことに気をつけてください。これらのメソッドはすべて新しい文字列インスタンスを返します。

関連する問題