修剪数组中的所有string

我有一个string,如:

string email = "a@a.com, b@b.com, c@c.com"; 

我想分割成一个string数组

如果我这样做:

 string[] emails = email.Split(','); 

每个电子邮件地址前面都有空格(在第一个之后):

 emails[0] = "a@a.com" emails[1] = " b@b.com" emails[2] = " c@c.com" 

什么是最好的方式来获得这个(要么更好的方法来parsing或修剪数组中的所有string)?

 emails[0] = "a@a.com" emails[1] = "b@b.com" emails[2] = "c@c.com" 

你也可以replace所有的空格,所以避免foreach循环:

 string email = "a@a.com, b@b.com, c@c.com"; string[] emails = email.Replace(" ", "").Split(','); 
 emails.Split(',').Select(email => email.Trim()).ToArray() 

以下任一项都可以工作。 我build议第一个,因为它更准确地expressionjoinstring。

 string[] emails = email.Split(new string[] { ", " }, StringSplitOptions.None); string[] emails = email.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries); 

使用Regex.Split来避免修剪

 var emails = Regex.Split(email, @",\s*"); 

你可以使用Trim():

 string email = "a@a.com, b@b.com, c@c.com"; string[] emails = email.Split(','); emails = (from e in emails select e.Trim()).ToArray(); 

你可以像这样使用一行解决scheme:

 string[] emails = text.Split(',', StringSplitOptions.RemoveEmptyEntries); Array.ForEach<string>(emails, x => emails[Array.IndexOf<string>(emails, x)] = x.Trim()); 

Bryan Watts的答案是优雅而简单的。 他隐含地引用由Split()创build的string数组。

如果您正在读取文件,还要注意其可扩展性,并且在构build数组时需要按摩数据。

 string sFileA = @"C:\Documents and Settings\FileA.txt"; string sFileB = @"C:\Documents and Settings\FileB.txt"; // Trim extraneous spaces from the first file's data string[] fileAData = (from line in File.ReadAllLines( sFileA ) select line.Trim()).ToArray(); // Strip a second unneeded column from the second file's data string[] fileBData = (from line in File.ReadAllLines( sFileB ) select line.Substring( 0, 21 ).Trim()).ToArray(); 

当然,如果你愿意,你可以使用Linq =>符号。

 string[] fileBData = File.ReadAllLines( sFileB ).Select( line => line.Substring( 0, 21 ).Trim()).ToArray(); 

虽然我的回答应该是作为评论发布的,但我还没有足够的声望点评论。 但是在使用ReadAllLines()的时候,我发现这个讨论是非常有用的。

foreach循环中使用String.Trim ,或者如果您使用的是.NET 3.5或LINQ语句。

或者,您可以使用表单的正则expression式进行拆分:

 \s*,\s* 

 string[] emails = Regex.Split(email, @"\s*,\s*"); 

它会直接消耗周围的空间。

正则expression式通常是一个性能问题,但是您给出的示例表明,这是您计划在代码中执行一次简短数组的代码。