如何将一个字符串拆分并修剪成一行中的所有部分?

时间:2009-11-13 10:06:54

标签: c# .net split trim

我想分开这一行:

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

到他们修剪版本的数组中:

"First Name"
"string"
"firstName"

如何在一行中完成所有操作?以下内容给出了一个错误“无法转换类型无效”:

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

8 个答案:

答案 0 :(得分:248)

尝试

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

仅供参考,Foreach方法接受一个Action(取T并返回void)作为参数,并且你的lambda返回一个字符串作为string.Trim返回一个字符串

Foreach扩展方法用于修改集合中对象的状态。由于字符串是不可变的,这将没有效果

希望它有所帮助; o)

和Cédric

答案 1 :(得分:20)

ForEach方法不会返回任何内容,因此您无法将其分配给变量。

请改用Select扩展名方法:

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

答案 2 :(得分:5)

因为p.Trim()返回一个新字符串。

您需要使用:

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

答案 3 :(得分:3)

或者试试这个:

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

答案 4 :(得分:2)

尝试使用Regex:

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

答案 5 :(得分:1)

这是一种扩展方法......

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

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

答案 6 :(得分:0)

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;
}

答案 7 :(得分:-1)

使用正则表达式

&#13;
&#13;
string a="bob, jon,man; francis;luke; lee bob";
			String pattern = @"[,;\s]";
            String[] elements = Regex.Split(a, pattern).Where(item=>!String.IsNullOrEmpty(item)).Select(item=>item.Trim()).ToArray();;			
            foreach (string item in elements){
                Console.WriteLine(item.Trim());
&#13;
&#13;
&#13;

结果:

鲍勃

乔恩

弗朗西斯

鲍勃

解释模式[,; \ s]:匹配一个出现的,;或空格字符