2011-01-25 32 views
8

Làm cách nào để xóa mục trống khỏi mảng?cách bạn xóa mục nhập trống khỏi mảng

Lặp lại và gán các mục không trống vào mảng mới?

String test = "John, Jane"; 

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

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

Cảm ơn rất nhiều quan điểm, yêu thích nó. – Rod

Trả lời

26

Sử dụng sự quá tải của string.Split mà phải mất một StringSplitOptions:

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

Gotta tình yêu SO - không bao giờ biết về 'StringSplitOptions.RemoveEmptyEntries' :) – Oded

+0

cảm ơn rất mát mẻ cho rằng – Rod

+0

@rod Rất vui được giúp đỡ. Tôi sẽ để nó cho bạn để thực hiện bộ nhớ đệm của mảng delimiter nếu bạn sẽ gọi nó liên tục. –

0

Bạn có thể đặt chúng trong một danh sách sau đó gọi phương thức toArray của danh sách, hoặc với LINQ bạn có thể có thể chỉ cần chọn các phi trống và làm toArray.

5

Bạn sẽ sử dụng the overload of string.Split which allows the suppression of empty items:

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

Hoặc thậm chí tốt hơn, bạn sẽ không tạo ra một mảng mới mỗi lần:

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 không sửa đổi danh sách, do đó nên khỏe.

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

'''' vẫn sẽ gây ra 'string.IsNullOrEmpty' để trả về false. Nếu bạn muốn sử dụng 'IsNullOrEmpty', bạn phải' Trim() 'trước tiên. –

+0

@Justin điểm tốt. tôi bỏ qua điều đó: P –

1

Hãy thử điều này bằng cách sử dụng một chút LINQ:

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

Nếu tách được theo sau bởi một dấu cách, bạn chỉ có thể bao gồm nó trong tách:

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

Nếu dấu phân cách cũng xảy ra mà không có dấu cách, bạn cũng có thể bao gồm dấu phân cách:

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

Lưu ý: Nếu chuỗi chứa các mục rỗng thực sự, chúng sẽ được giữ nguyên. I E. "Dirk, , Arthur" sẽ không cho kết quả tương tự như "Dirk, Arthur".

Các vấn đề liên quan