.net 我如何将一个字符串分割并修剪成一行中的多个部分?

im9ewurl  于 2022-12-24  发布在  .NET
关注(0)|答案(9)|浏览(109)

我想把这条线分开:

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

转换成一个裁剪版本的数组

"First Name"
"string"
"firstName"

**如何在一行中完成所有这些操作?**下面的代码给我一个错误“cannot convert type void”:

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

lx0bsm1f1#

试试看

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

仅供参考,Foreach方法接受Action(接受T并返回void)作为参数,并且lambda将字符串作为string返回。Trim将返回字符串
Foreach扩展方法用于修改集合中对象的状态。由于字符串是不可变的,因此这不会产生任何效果

jecbmhm3

jecbmhm32#

ForEach方法不返回任何值,因此不能将其赋给变量。
请改用Select扩展方法:

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

yvfmudvl3#

在.net 5之后,解决方案就像这样简单:

List<string> parts = line.Split(';', StringSplitOptions.TrimEntries);
jm81lzqq

jm81lzqq4#

因为p.Trim()返回一个新字符串。
您需要用途:

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

ehxuflar5#

这里有一个扩展方法...

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

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

xyhw6mcr6#

或者试试这个:

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

e1xvtsh37#

尝试使用正则表达式:

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

sbdsn5lh8#

拆分返回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;
}
ftf50wuq

ftf50wuq9#

使用正则表达式

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

结果:
摆锤
乔恩

Francis
卢克
背风面
摆锤
解释模式[,; \s]:匹配、;或空格字符

相关问题