修剪数组中的所有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式通常是一个性能问题,但是您给出的示例表明,这是您计划在代码中执行一次简短数组的代码。