修剪数组中的所有字符串

leo*_*ora 63 .net c# arrays trim

我有一个字符串,如:

string email = "a@a.com, b@b.com, c@c.com";
Run Code Online (Sandbox Code Playgroud)

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

如果我这样做:

string[] emails = email.Split(',');
Run Code Online (Sandbox Code Playgroud)

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

emails[0] = "a@a.com"
emails[1] = " b@b.com"
emails[2] = " c@c.com"
Run Code Online (Sandbox Code Playgroud)

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

emails[0] = "a@a.com"
emails[1] = "b@b.com"
emails[2] = "c@c.com"
Run Code Online (Sandbox Code Playgroud)

Bry*_*tts 219

emails.Split(',').Select(email => email.Trim()).ToArray()
Run Code Online (Sandbox Code Playgroud)

  • 这比接受的答案要好,因为问题是TRIM每个字符串,不一定用空格替换空格. (6认同)
  • @Moismyname:我不确定什么样的约束会引导你走上这条道路,但还有其他答案可以解决你的问题. (3认同)

nic*_*083 39

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

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

  • @ 280Z28:这不是一个downvote的理由. (10认同)
  • 适用于此特定示例,但不保留结果元素的空间,例如; "foo bar,另一个元素,blah_blah".Bryan Watts有最好的答案IMO. (8认同)
  • -1 我同意这不是一件好事。买家当心。 (2认同)

Sam*_*ell 20

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

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

  • +1 我们如此频繁地使用 LINQ,以至于我们往往忘记了其他优雅的选项确实存在。 (2认同)

ska*_*alb 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();
Run Code Online (Sandbox Code Playgroud)


Bri*_*sen 8

使用Regex.Split以避免修剪

var emails = Regex.Split(email, @",\s*");
Run Code Online (Sandbox Code Playgroud)


for*_*ini 6

.NET 5 已经到来,随之而来的是解决此问题的现代解决方案:

string[] emails = email.Split(',', StringSplitOptions.TrimEntries);
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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