web-dev-qa-db-ja.com

どうすれば文字列を1行に分割してトリムできますか?

この行を分割したい:

string line = "First Name ; string ; firstName";

トリミングされたバージョンの配列に:

"First Name"
"string"
"firstName"

これをすべて1行で行うにはどうすればよいですか?次の例では、「型voidを変換できません」というエラーが表示されます。

List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim()); 
109
Edward Tanguay

試して

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

参考までに、Foreachメソッドはパラメーターのアクションを取り(Tを取り、voidを返します)、ラムダはストリングとしてストリングを返します。

Foreach拡張メソッドは、コレクション内のオブジェクトの状態を変更するためのものです。文字列は不変なので、これは効果がありません

それがお役に立てば幸いです; o)

セドリック

257
Cédric Rup

ForEachメソッドは何も返さないため、変数に割り当てることはできません。

代わりにSelect拡張メソッドを使用します。

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
21
Guffa

P.Trim()は新しい文字列を返すためです。

以下を使用する必要があります。

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
5
Matt Breckon

または、これを試してください:

string[] parts = Regex.Split(line, "\\s*;\\s*");
3

正規表現を使用してみてください:

List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList();
2
user2826608

ここに拡張メソッドがあります...

    public static string[] SplitAndTrim(this string text, char separator)
    {
        if (string.IsNullOrWhiteSpace(text))
        {
            return null;
        }

        return text.Split(separator).Select(t => t.Trim()).ToArray();
    }
1
LawMan

Splitはstring []タイプを返します。拡張メソッドを書く:

public static string[] SplitTrim(this string data, char arg)
{
    string[] ar = data.Split(arg);
    for (int i = 0; i < ar.Length; i++)
    {
        ar[i] = ar[i].Trim();
    }
    return ar;
}
0
foxjazzHack