79

次のような文字列があります。

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"
4

11 に答える 11

253
emails.Split(',').Select(email => email.Trim()).ToArray()
于 2009-08-31T04:19:42.640 に答える
41

出現するすべてのスペースを置き換えることもできるため、foreach ループを回避できます。

string email = "a@a.com, b@b.com, c@c.com";    
string[] emails = email.Replace(" ", "").Split(',');
于 2009-08-31T04:00:12.943 に答える
23

次のいずれかが機能します。結合文字列をより正確に表現するため、最初のものをお勧めします。

string[] emails = email.Split(new string[] { ", " }, StringSplitOptions.None);
string[] emails = email.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
于 2009-08-31T04:01:46.357 に答える
11

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();
于 2009-08-31T03:53:47.573 に答える
8

Regex.Splitトリミングを避けるために使用

var emails = Regex.Split(email, @",\s*");
于 2009-08-31T04:01:15.483 に答える
5

次のような 1 行のソリューションを使用できます。

string[] emails = text.Split(',', StringSplitOptions.RemoveEmptyEntries);
Array.ForEach<string>(emails, x => emails[Array.IndexOf<string>(emails, x)] = x.Trim());
于 2011-02-10T14:18:40.893 に答える
2

または、次の形式の正規表現を使用して分割できます。

\s*,\s*

すなわち

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

周囲の空間を直接消費します。

通常、正規表現はパフォーマンスに影響しますが、指定した例は、これが短い配列のコードで一度実行する予定であることを示しています。

于 2009-08-31T03:57:37.253 に答える
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 => 表記を使用することもできます。

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

私の回答はコメントとして投稿されているはずですが、まだコメントするのに十分な評価ポイントがありません。しかし、ReadAllLines() の使用中にデータを操作する方法を理解する上で、この議論は非常に貴重であることがわかりました。

于 2016-03-17T20:33:01.157 に答える
0

ループで使用するString.Trimforeach、.NET 3.5+ を使用している場合は LINQ ステートメントを使用します。

于 2009-08-31T03:54:53.313 に答える