如何将一条线拆分并修剪成一条线?


124

我想分割这一行:

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

到其修剪版本的数组中:

"First Name"
"string"
"firstName"

我怎样才能一齐完成这一切?下面给我一个错误“无法转换类型无效”:

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

2
由于ForEach在和的当前实例上工作IEnumerable而返回错误void
Majkel

Answers:


291

尝试

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

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

Foreach扩展方法旨在修改集合中对象的状态。由于字符串是不可变的,因此这无效

希望能有所帮助; o)

塞德里克


3
注意:ForEach不是扩展方法。
Guffa 2012年

Linq的最佳解决方案!
Sonhja '16

如果没有值该怎么办返回空值?
Demodave

如果line为null,那么您将获得异常。如果行不包含“;” 你必须与对应trimmid行一个字符串列表
塞德里克RUP

22

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

使用Select扩展方法:

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


3

或者尝试以下方法:

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

这是一个好主意,但是,我相信会在字符串末尾遗漏任何空格,对吗?
jrichview

3

这是一种扩展方法...

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

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

2

尝试使用Regex:

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

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

我喜欢您的解决方案,因此决定添加到该解决方案中,并使其更加实用。

public static string[] SplitAndTrim(this string data, char[] arg)
{
    return SplitAndTrim(data, arg, StringSplitOptions.None);
}

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

-1

使用正则表达式

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());

结果:

鲍勃

乔恩

男子

弗朗西斯

路加

鲍勃

说明模式[,; \ s]:匹配出现一次,,;或空格字符

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.