我有一个字符串,如:
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"
答案 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());