2011-01-25 26 views
8

Boş öğeyi diziden nasıl kaldırırsınız?Boş girdiyi diziden nasıl kaldırırsınız

Boş olmayan öğeleri yeni diziye yineleyin ve atayın mı?

String test = "John, Jane"; 

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

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

Çok fazla perspektif için teşekkürler, onu seviyorum. – Rod

cevap

26

bir StringSplitOptions alır string.Split aşırı yüklenmesini kullanın:

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

Gotta love SO - 'StringSplitOptions.RemoveEmptyEntries' :) – Oded

+0

hakkında hiç bir şey bilmiyordum – Rod

+0

@rod için teşekkürler. Bunu tekrar tekrar çağırırsanız, sınırlayıcı dizinin önbelleğini uygulamak için size bırakacağım. –

0

Daha sonra listenin toArray yöntemini çağırın veya LINQ ile muhtemelen sadece olmayan seçmek olabilecek bir liste halinde koyabilirsiniz boş ve toArray yapın. o olmalı, böylece

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 listesini değiştirmez:

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

Hatta daha da iyisi, yeni bir diziye her zaman yaratmaz:

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 döndürecek. "IsNullOrEmpty" yi kullanmak istiyorsanız, önce "Trim()" seçeneğine sahip olmanız gerekir. –

+0

@Justin iyi bir nokta. gözardı ettim: P –

1

biraz LINQ kullanarak bu deneyin: ayırıcı ve ardından bir boşluk varsa

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

, sen ayırıcı içinde dahil sadece edebilirsiniz:

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

Ayırıcı, izleyen boşluk olmadan da oluşursa, şunları da ekleyebilirsiniz:

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

Not: Dize gerçekten boş öğeler içeriyorsa, bunlar korunacaktır. Yani "Dirk, , Arthur", "Dirk, Arthur" ile aynı sonucu vermez.

İlgili konular