我如何将字符串分割并修剪成一行?

问题描述 投票:111回答:8

我想分割此行:

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

进入其修剪版本的数组:

"First Name"
"string"
"firstName"

如何在一行上完成所有操作?以下内容为我提供了一个错误“无法转换类型为空”:

List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim()); 
c# .net split trim
8个回答
263
投票

尝试

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

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

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

希望有帮助; o)

Cédric


22
投票

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

改为使用Select扩展方法:

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

5
投票

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

您需要使用:

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

3
投票

或者尝试这个:

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

2
投票

这里是扩展方法...

    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
投票

拆分返回字符串[]类型。编写扩展方法:

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

结果:

bob

jon

man

弗朗西斯

卢克

lee

bob

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

© www.soinside.com 2019 - 2024. All rights reserved.