2011-01-25 17 views
8

どのように空のアイテムを配列から削除しますか?配列から空白のエントリを削除する方法

空でない項目を繰り返して新しい配列に割り当てますか?

String test = "John, Jane"; 

//Without using the test.Replace(" ", ""); 

String[] toList = test.Split(',', ' ', ';'); 
+1

非常に多くの視点のおかげで、それを愛する。 – Rod

答えて

26

StringSplitOptionsを取るstring.Splitのオーバーロードを使用しますし、リストのToArrayメソッドを呼び出し、またはLINQであなたはおそらく非を選択することができますが、リストにそれらを置くことができ

String[] toList = test.Split(new []{',', ' ', ';'}, StringSplitOptions.RemoveEmptyEntries); 
+2

とても愛している - 'StringSplitOptions.RemoveEmptyEntries'を知りませんでした:) – Oded

+0

そのための非常にクールな感謝 – Rod

+0

@rod喜んで助けになります。これを繰り返し呼び出す場合は、デリミタ配列のキャッシングを実装するようにしておきます。 –

0

を空白とtoArrayを実行します。

5

あなたはthe overload of string.Split which allows the suppression of empty itemsを使用します。

String test = "John, Jane"; 
String[] toList = test.Split(new char[] { ',', ' ', ';' }, 
          StringSplitOptions.RemoveEmptyEntries); 

またはより良い、あなたがするたびに新しい配列を作成しないでしょう。それがあるべきよう

private static readonly char[] Delimiters = { ',', ' ', ';' }; 
// Alternatively, if you find it more readable... 
// private static readonly char[] Delimiters = ", ;".ToCharArray(); 

... 

String[] toList = test.Split(Delimiters, StringSplitOptions.RemoveEmptyEntries); 

Splitは、リストを変更しません。良い。

1
string[] result = toList.Where(c => c != ' ').ToArray(); 
+0

var result = toList.Where(c =>!string.IsNullOrEmpty(c))。ToArray(); – MvcCmsJon

0
string[] toList = test.Split(',', ' ', ';').Where(v => !string.IsNullOrEmpty(v.Trim())).ToArray(); 
+0

''''は 'string.IsNullOrEmpty'がfalseを返すようにします。 'IsNullOrEmpty'を使いたい場合は、最初に' Trim() 'する必要があります。 –

+0

@Justin良い点。私はそれを見落とした:P –

1

少しLINQを使用して、これを試してみてください:

var n = Array.FindAll(test, str => str.Trim() != string.Empty); 
0

セパレータは空白が続いている場合、あなたは、セパレータで、それを単に含めることができます。

String[] toList = test.Split(
    new string[] { ", ", "; " }, 
    StringSplitOptions.None 
); 

区切り文字に後続スペースがない場合も、これらも含めることができます。

String[] toList = test.Split(
    new string[] { ", ", "; ", ",", ";" }, 
    StringSplitOptions.None 
); 

注:文字列に本当に空のアイテムが含まれている場合、それらは保持されます。私。 "Dirk, , Arthur""Dirk, Arthur"と同じ結果を得ません。

関連する問題