Ответ 1
Вы также можете заменить все вхождения пробелов, и поэтому избегайте цикла foreach:
string email = "[email protected], [email protected], [email protected]";
string[] emails = email.Replace(" ", "").Split(',');
У меня есть строка, которая приходит как:
string email = "[email protected], [email protected], [email protected]";
Я хочу разбить его на массив строк
Если я это сделаю:
string[] emails = email.Split(',');
Я получаю пробелы перед каждым адресом электронной почты (после первого):
emails[0] = "[email protected]"
emails[1] = " [email protected]"
emails[2] = " [email protected]"
Каков наилучший способ получить это (лучший способ разобрать или способ обрезать все строки в массиве)?
emails[0] = "[email protected]"
emails[1] = "[email protected]"
emails[2] = "[email protected]"
Вы также можете заменить все вхождения пробелов, и поэтому избегайте цикла foreach:
string email = "[email protected], [email protected], [email protected]";
string[] emails = email.Replace(" ", "").Split(',');
emails.Split(',').Select(email => email.Trim()).ToArray()
Будет работать одно из следующих. Я бы рекомендовал первый, так как он более точно выражает строку соединения.
string[] emails = email.Split(new string[] { ", " }, StringSplitOptions.None);
string[] emails = email.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
Вы можете использовать Trim():
string email = "[email protected], [email protected], [email protected]";
string[] emails = email.Split(',');
emails = (from e in emails
select e.Trim()).ToArray();
Используйте Regex.Split
, чтобы избежать обрезки
var emails = Regex.Split(email, @",\s*");
Вы можете использовать однострочное решение, подобное этому:
string[] emails = text.Split(',', StringSplitOptions.RemoveEmptyEntries);
Array.ForEach<string>(emails, x => emails[Array.IndexOf<string>(emails, x)] = x.Trim());
В качестве альтернативы вы можете разделить, используя регулярное выражение формы:
\s*,\s*
то есть.
string[] emails = Regex.Split(email, @"\s*,\s*");
Он будет использовать окружающие пространства напрямую.
Регулярные выражения обычно относятся к производительности, но приведенный вами пример указывает, что это то, что вы планируете сделать один раз в своем коде для короткого массива.
Ответ от Брайана Уотса элегантен и прост. Он неявно ссылается на массив строк, созданных Split().
Также обратите внимание на его расширяемость, если вы читаете файл и хотите массировать данные при построении массива.
string sFileA = @"C:\Documents and Settings\FileA.txt";
string sFileB = @"C:\Documents and Settings\FileB.txt";
// Trim extraneous spaces from the first file data
string[] fileAData = (from line in File.ReadAllLines( sFileA )
select line.Trim()).ToArray();
// Strip a second unneeded column from the second file 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().
Используйте String.Trim
в цикле foreach
или если вы используете .NET 3.5+ оператор LINQ.
Если вам просто нужно манипулировать записями, не возвращая массив:
string[] emails = text.Split(',');
Array.ForEach(emails, e => e.Trim());