修剪数组中的所有字符串

时间:2009-08-31 03:50:06

标签: c# .net arrays trim

我有一个字符串,如:

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

我想把它拆分成一个字符串数组

如果我这样做:

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

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

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

获得此功能的最佳方法是什么(更好的解析方法或修剪数组中所有字符串的方法)?

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

11 个答案:

答案 0 :(得分:209)

emails.Split(',').Select(email => email.Trim()).ToArray()

答案 1 :(得分:33)

您也可以替换所有出现的空格,因此请避免使用foreach循环:

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

答案 2 :(得分:19)

以下任一项都可以使用。我推荐第一个,因为它更准确地表达了连接字符串。

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

答案 3 :(得分:10)

您可以使用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();

答案 4 :(得分:8)

使用Regex.Split以避免修剪

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

答案 5 :(得分:5)

您可以使用这样的单行解决方案:

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

答案 6 :(得分:1)

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

\s*,\s*

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

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

正则表达式通常会受到性能影响,但您提供的示例表明,您计划在代码中为短数组执行此操作。

答案 7 :(得分:1)

Bryan Watts的答案优雅而简单。他隐含地引用了Split()创建的字符串数组。

如果您正在阅读文件,并且想要在构建阵列时按摩数据,请注意其可扩展性。

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 =&gt;如果您愿意,可以使用符号。

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

虽然我的答案应该作为评论发布,但我还没有足够的声誉来评论。但我发现这个讨论非常有用,可以确定在使用ReadAllLines()时如何按摩数据。

答案 8 :(得分:1)

.NET 5 已经到来,它是解决这个问题的现代解决方案:

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

如果您只需要操作条目而不返回数组:

string[] emails = text.Split(',');
Array.ForEach(emails, e => e.Trim());